tzkr.net
当前位置:首页 >> 若有int A 10 >>

若有int A 10

#include<stdio.h> main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; for(i=0;i<10;i++) printf("%d ",*(a+i)); } #include<stdio.h> main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; int i,*q=a; for(i=0;i<10;i++) printf("%d ",*(q++)); }

答案:d 对于数组a[10],a就是该数组的首地址,定义指针p赋值为a,那么a和p的操作基本相同:a[5]=p[5]=*(a+5)=*(p+5),对于d选项,p[5]是个int值,再取*就不对了.

程序1.//定义为局部性质的数组#include void main(){ int a[5]; //定义局部性质的数组 int i; for(i=0;iint a[5]; //定义为全局性质的数组void main(){ int i; for(i=0;i 评论0 0 0

A是对的 a是个constant pointer 意思就是a是个pointer 但a指向的address是不能改变的 不像p现在你指向&a[0]但下一秒你可以把他指向别的存在int的address而C一定是错的 a[0]就等於*a 怎可能*a=a

a是数组a[10]的首地址int *p=a; 表示定义一个指针p,它指向a[10]的第一个元素a[0]*(p+0) ==a[0]*(p+1) ==a[1]*(p+2) ==a[2]*(p+6) ==a[6]

a 是个常量,不能变化,但是p是个指针变量,可以加减,p的加减与p的类型有关,如果p是个int 则,每次加四个字节,就是int 型的长度,其它的也是相同的.char 每次加一个字节.p+5代表第六个数值的地址.即*(p+5)=a[5]; 不知道你是否明白,如果不清楚的话,加我好友,咱们共同探讨

很明显,这里的a[9]只有定义即分配了内存,而没有被初始化.这样a[9]的存储空间是一个不确定的数,但这个数一般来说并不是0,也不可能默认为0.如果这个数比1小,那a[9]应该是最小值,如果这个数比9大,那么a[9]应该是最大值.但因为a[9]并没有确定,所以无论a[9]是否最大值或最小值,都没有实际意义.如果用软件来找a[0]--a[9]的最大最小值,只要a[9]参与了比较运算,那就会向上面说的那样,结果是不确定的.

p=&a,*p=&a[0],p=a[0]或a[1],a[2]都不正确

我昨天参加个公司的笔试就做过这个题,难道LZ因为C语言规定对数组元素的引用下标是从0开始的,所以数组a[10]中,最多引用到a[9],a[10]就是越界了,所以A错 而下标应该用整型的,B错 下标运算符是[],NOT (),C错 就剩下D了,下标可以是表达式的

这个与系统有关.这里的a[0]+1实际上相当于&a[0][0]+1,即计算与a[0][0]元素相邻的下一个int类型元素(因为数组是int类型)的地址,即a[0][1]的地址,如果在过去的16位系统上,一个int类型的变量占用16位,也就是两个字节,所以a[0]+1中的+1就向后移动了两个字节,如果是32位系统,那么一个int类型变量就是占32位,也就是4字节,所以这里的+1实际上就移动了4字节.

网站首页 | 网站地图
All rights reserved Powered by www.tzkr.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com