让我来帮你综合一下!!!
1、int *p,*q;q=p;
这句基本是对的(但要看你怎么用),首先定义了*P,*q两个指针,q=p这句是将地址p赋给了q,没有问题;
看下面两个句子:
printf("%d",q);----这个句子是正确的,它只是把q中的地址(既p的地址)输出!!
printf("%d",*q);----但这个句子就是错误的了!!*q为p中数据的值!因为p中的内容是未被定义的,所以编译器会在运行是出错哦!!!
int a,*p,*q;p=q=&a; -----这个同上面的道理是一样的,
printf("%d",q);----正确,输出a的地址;
printf("%d",*q);----如果a没有被定义,那么编译器就会报错咯!
2 int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;
分析下:如果这是在一个程序中,第一错就在重定义上!第一行定义了a,*P,第二行又定义a,*p!--重定义下面就不说了,
第二个错在 p=*q;看来你还没理解指针变量,书上明确定义指针变量只能用来存放地址!而*q是一个具体的值(数或者字符什么的)!
第三个隐性错误!*p=a;从你的定义看,指针p未被初始化!(p=*q是错误的)如果你把p=*q改成p=q那么*p=a;就没问题了。如果你删了p=*q,那就错咯!
3 int a=b=0,*p;p=&a;b=*p
int a=20;*p,*q=&a;*p=*q;
分析下:int a=b=0;定义整型变量a,b,但在不同的编译器上不一定正确。有的机子上你要这样定义才正确:int a,b;a=b=0;
*p;p=&a;b=*p:---定义了指针p把a的地址给了p,在把p中存放地址的值(既a的值)给b;-----这句明显是正确的哦!
看下一句:int a=20;*p,*q=&a;*p=*q;错啦!!(标点符号也错啦!)
第一个错:明显p没有初始化!运行是会报错!
第二个错:*q=&a,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;要明白p存放的是地址,而*p存放的是值。(不考虑多重指针的情况)
看下一句:*p=*q---是正确的,意思是把q所指向的地址上的值给p指向的地址的指。给你个例句:
int a=10,b=20;
int *p=&a,*q=&b;
*p=*q;
结果很明显a=20;既*p=20
4 int a=20;*p,*q=&a;p=q;
int p,*q;q=&p;
最后一点啦!第一行!看似没错!其实---,事实上c语言的定义不能在一次定义中引用此次定义的其他变量!像你的int a=20;*p,*q=&a;p=q;
*q=&a,由于a属于此次定义中的变量,所以出错咯!应该分开定义就OK啦!
int a=20;
int *p,*q=&a;p=q;
注意一点int *p=&a;初学者很不明白!不是,*q是一个具体的值,而&a是变量a的地址。两者是不能相等的;??那为什么这里又正确呢?
其实这有一个误区,你可以这样看(int *)p=&a;当然这样定义是错的
我只是说这样看!在定义指针时把指针定义符‘*’与前面的类型‘int’看成一块!int *p=&a;与下面句子等效
int *p; p=&a;
而int *p; *p=&a是错误的!!
最后一句:int p,*q;q=&p;
注意你这里p是一个整型的变量!!不是指针!像前面的a,b.
明显这句是正确的!
不知道满意不?
温馨提示:内容为网友见解,仅供参考