c语言指针方面的小问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 16:29:00
int a=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
A)*q=0; B)w=p; C)*p=a;
上面的ABC三个选项有语法错误的是()
(最好说出理由)

应该是A)错误

q在语句“q=&b;”q指向向量b所处的内存空间,

同时通过“w=p”,将w具有与q相同的指向,

再“q=NULL;”将q指向空(内存地址00000000),指向这个区域后不能赋值。
要重新赋个有效的地址值后才可以对其所指的区域赋值。
但是注意w的指向并不随q指针指向的改变而改变,
除非在“q=NULL;”后再加上“w=q”.

另外“p=&a;”后,p一直指向变量a所在内存空间。可以使用*p=a;还可以*p=b;意思是将=右边向量的值赋给p所指的区域。

A 错误,q指向的内存还没有分配呢!不能给*p赋值。
B 正确
C 错误,理由同A。