c程序问题,求解啊。。TT

设变量定义为 int a[2]={1,3}, *p=&a[0]+1;,则*p的值是_____。
A.2 B.3 C.4 D.&a[0]+1
想说*p不是p指向的值么。。对*p赋值了。。不是应该就是D么。觉得&a[0]+1 这个好像是a[1]的地址啊。答案怎么会是B的啊。

对于以下的变量定义,表达式______是正确的。
struct node {
char s[10];
int k;
} p[4];
A.p->k=2 B.p[0].s=“abc” C.p[0]->k=2 D.p->s=‘a’
p[0]不是算是一个指向结构的指针么。。那为什么B,C不对啊?

下列程序段的输出结果是_____。
int *p, *q, k = 1, j=10 ;
p=&j; q = &k ; p = q ; (*p)++;
printf("%d",*q);
A.1 B.2 C.10 D.11
这个真心不会了。。我觉得是K+1=2.。可是答案是A。。
看到的帮帮忙吧。。

a[0]是a数组的第一元素值,对他取地址&a[0]即是第一个元素的地址,对第一个元素的地址+1,显然是第二个元素的地址,再对p解地址*p,那么肯定是3了。

p[0].s是一个char[10],而"abc"是一个const char*所以无法复制B,D错,这个和数组的初始化不一样。、第二题应该是A吧,不过要说明的是p[0]是一个node型变量,不是一个指针,D错,变量不能用指向成员操作,p这个指针指向的是4个node变量组成的数组的首地址,就是&a[0] 所以p->k = 2相当于p[0].k = 2

第三题我觉得是2,会不会答案错了。我分析是p存放J的地址,q存放K的地址, p = q,则现在P也指向K,*p就是1,(*p)++相当于k++,所以是2,如果答案是1的话,那我估计是编译器不同的问题,或者是………… *p解地址后只代表1,1++是2,但是k没有修改。不过估计不可能。可以自己调试一下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-09
第一题:*p是前面是逗号,也就是说原式可以看成
int a[2] = {1,3};
int* p = &a[0]+1;//这样应该没问题了吧,p是指向a[0]的地址再向后移动一个位置的地址,
也就是3。
第二题:B答案字符串复制必须用循环或者strcpy(),不能直接复制,想一想。C答案P[0]是一个元素了,不是指针,必须写成p[0].k = 2;
第三题 答案是2,你没有错。相信自己。
第2个回答  2012-01-09
1、
int *p=&a[0]+1相当于
int *p;
p = &a[0]+1;
也就是说p = a[1]; *p = 3;
2、
B选项,对于任何的数组比如:
char sss[10] ;
sss = "abc" ; ///这样赋值都是错的
strcpy(sss,"abc"); ////这样才正确
C选项,p[0]已经不是指针了,应该是p[0].k = 2 才正确。。。
D同B
A选项正确;
3、
本人亲手调试,输出是2
第3个回答  2012-01-09
a[0] 是第一个元素 他的地址+1 就是第二个元素 所以*p = a[1] =3

第三题答案是2
第4个回答  2012-01-08
第一个*p是在声明变量,在这里‘*’说明p是一个指针变量,所求的*p,是在求这个p空间的对应值。
p[0]只是结构体变量。
第三题我也觉得是2.。。。
相似回答