对于int*p;int a[];p=a;的合法运算是什么?
b.若p中的地址为100则p++;运算后则其值为100
c,p=a;p++相当于a++
d、a++ 展开
选B
A错误。类型不对,++p是int*,a[1]是int。
B正确。dup++只改变了p这个指针的值,并没有改变p指向的地址的值。
C错误。int[]类型不允许++操作。
D错误。int[]类型不允许++操作。
例如:
++p; 相当于 a[1] 。
准确表达是 ++p 指向的地址是 &a[1]; 因为前面 有 p=a; 即初始,让p指向了 a 的始地址。
这里 ++ 是前缀加加,在表达式里 要先增1再使用,所以指向了 a[1]。
#include <stdio.h>
int main () {
int *p;
int a[]={1,2,3,4,5}; //这里要让a有存放空间,数组大小要确定下来。
p=a;
++p;
printf("%d %d\n",*p, a[1]); //输出数值
printf("%p %p\n",p, &a[1]); //输出地址
return(0);
}
扩展资料:
条件运算符优先级高于赋值、逗号运算符,低于其他运算符
例如:
⑴ m<n ? x : a+3
等价于:(m<n) ?(x) :(a+3)
⑵ a++>=10 && b-->20 ? a : b
等价于:(a++>=10 && b-->20) ? a : b
⑶ x=3+a>5 ? 100 : 200
等价于:x= (( 3+a>5 ) ? 100 : 200 )
参考资料来源:百度百科-条件运算符
合法运算是A。
++p; 相当于 a[1] 。
准确表达是 ++p 指向的地址是 &a[1]; 因为前面 有 p=a; 即初始,让p 指向了 a 的始地址。
这里 ++ 是前缀加加,在表达式里 要先增1再使用,所以指向了 a[1]。
#include <stdio.h>
int main () {
int *p;
int a[]={1,2,3,4,5}; //这里要让 a 有存放空间,数组大小要确定下来。
p=a;
++p;
printf("%d %d\n",*p, a[1]); //输出数值
printf("%p %p\n",p, &a[1]); //输出地址
return(0);
}
A.错误。类型不对,++p是int*,a[1]是int
B.正确。p++只改变了p这个指针的值,并没有改变p指向的地址的值
C.错误。int[]类型不允许++操作
D.错误。int[]类型不允许++操作
故选B
广告 您可能关注的内容 |