c语言指针问题,有一些疑惑。 比如已经定义了以下, int a; int *q=NULL; a=

c语言指针问题,有一些疑惑。
比如已经定义了以下,

int a;
int *q=NULL;
a=10;

疑问是
1.q=a;
2.q=&a;
3.*q=a;
4.*q=&a;

解释下这四种写法什么意思,我完全弄混淆了

1 是错误的,不能将 int 赋值给 int *
2 是正确的,因为 &a 的类型为 int *,正是 q 的类型;
3 理论上正确,实际中不妥,因为 q 指向受保护内存区,此时对 q 解引用并赋值,程序会崩掉;
4 是错误的,道理和 3 同理;追问

为什么书上可以在定义时初始 int *p=a还是 int *p=&a;

追答

这种问题,你上机实践一下就知道了;
在这里讨论只能是纸上谈兵;

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-26
1.q = a; // 类型不同,会给出编译警告
2.q = &a;// 指针p指向a的存储地址,正常用法
3.*q = a;// 有问题,a的值放哪儿呢?
4.*q = &a;// 有问题,a的地址放哪儿呢?

追问

有些书上写的q=a

还有的是定义时*p=a还是*p=&a

int *p=a还是 int *p=&a;

系统没有报错啊

追答

int a = 3,b;
int *pa = &a; // pa前有*,这个*的唯一用途是表明pa是指针(定义指针)
pa = &b; // pa 指向b的存放地址
*pa = a; // 等同于b = a,这是在复制时带*,这个*的用途是解除指针的引用

追问

谢谢

本回答被提问者采纳
相似回答