C语言指针问题(求高人指点啊)

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:04:48
有四组对指针变量进行操作的语句
1、int *p,*q;q=p;
int a,*p,*q;p=q=&a;
2 int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;
3 int a=b=0,*p;p=&a;b=*p
int a=20;*p,*q=&a;*p=*q;
4 int a=20;*p,*q=&a;p=q;
int p,*q;q=&p;
因为我对指针的定义如何都不是很了解,希望有高手能够详细的讲讲每一句的对错以及原因,万分感激!!
可是貌似1是错的,int *p,*q;q=p; 如果没有指明地址单元,可以赋值么?

让我来帮你综合一下!!!
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;错啦!!(标点符号也错啦!)
第一个错