潍坊工程职业学院学报:C语言小问题

来源:百度文库 编辑:高考问答 时间:2024/04/29 15:27:44
(38) 已有定义:int i,a[10],*p;,则合法的赋值语句是
A) p=100; B) p=a[5]; C) p=a[2]+2; D) p=a+2;
答案A
以下叙述中正确的是
A) 局部变量说明为static存储数,其生存期将得到延长
为什么身春期会变长

静态变量当然生存期长啊。。。。
他从一开始内存就划一块区域给它,只有全部退出了才释放。

因为P存储的是一个整形变量的地址信息。P=100就是把地址为[0100]的那个整形的地址值赋给P。
其他的都是不同类型的赋值,所以有错

普通变量在程序结束时,内存自动释放.而static 则等到整个程序结束.当需要变量延续上次调用时的值时,可以用static型.这也说明其生命期长.第一个就是要看清变量的类型.

上面的错了,合法的赋值语句应该是D
它是把a数组中的第三个数的地址赋给指针变量p,而其他的都是把一个数赋给p,是不合法的.
假如A正确,那么如果内存中有两个地方都是存数100,那么p应该等于哪个啊?

下面的题好像不全吧?

正确答案绝对是D,D的意思是使指针P指向a,然后地址再加2,注意,不是地址值加2!而不是楼上所说的全局变量,应该是自动变量!
我们来举个例子:
main()
{int a[5]={100,200,300,400},*p;
p=a+2;
printf("%d\n",*p);}
所得到的结果为300!