关于几道C语言的问题

Python039

关于几道C语言的问题,第1张

第一题:运行结果应该为:porm,

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