ptr=a,就是*ptr=a[0],循环一次ptr+=2之后*ptr=a[2],之后就是a[4],a[6],也就是p,o,r,m;
第二题:
和上一个一样 指针p=s,就是,p指向了数组的首地址也就是第一个元素s[0]的地址,所以,*p就
是指s[0],而输出p则是用首地址来输出了整个字符数组,而循环一次之后,p向后移一位了,p就指向
s[1]的地址,*p=s[1](也就是B),输出整个字符数组,也就是从s[1]开始,依次类推;
第三题:
是这样,二维数组本质上在内存中来说也是一维的,它的第二行是接着第一行来存的,是连续的
在内存中,所以你可以用一维的方式连续输出6个,如果p<a[0]+12,也就全输出了。
第三题:
是这样,struct结构体的大小是将其所有的数据成员的大小相加的到的,所以,3个int型是6。
而,union联合大小是等于其内部数据成员中最大的,所以其大小等于long型等于4。
第四题:
结构体中有两个数据成员,一个是int型数据,一个是指向结构体st类型的指针;而定义的
st类型的数组a[3]中,a[0]存的是5和a[1]的地址,a[1]中存的是7和a[2]的地址,a[2]中存的是
7和a[0]的地址;
指针p=a,就指向了a[0],p=p->next,就是p=a[0].next,而a[0].next=&a[1],所以p就指向了a[1],
而p->n,就相当于a[1].n也就是7了;
第五题:
结果应该为:1 2 3 3 5 4
p=a*p=a[0],这是没有问题的,第二条,*(++p),先算前加加p指向a[1],在算*p,自然输出2,
第三条一样,*取值和++的优先级是一样的但是它们的结合性事从右向左,所以还是先算前加加p=a[2],
自然有输出了3,第四条,虽然,是先算p--,但是它是后减,即先取出p的值用,然后,在执行
自减,所以输出3,但是之后p指向了a[1],最后,p+=3,使p指向了a[4],所以输出5。但是a是数组名是常量,
是一直都没有变的所以*(a+3)=4;
第六题:
运行结果是:14。用a[2]={5,7,2,9}或者,a[2]={{5,7},{2,9}}结果是一样的,5赋值给a[0].x
7赋值给a[0].y,2赋值给a[1].x,9赋值给a[1].y,程序上来说没区别,只是可能从可读性上来说后者更好。
ok
基本就是这样
1)选(B)
Porm2)
选(B)
*p表示的是变量a
的值,而不是变量a的地址3)
选(B)
ga4)
选(D)
*p与s[0]相等5)
选(A)15 6)
选(A)
LANGUAGE7)
选(B)
是一个指针数组名8)
选(D)
*(*(a+m)+n) 1)
选(B)
p1=p2