c语言问题,请求帮忙!

来源:百度知道 编辑:UC知道 时间:2024/05/15 00:18:39
int a=5,*p;*p=a;
int a=5,*p,*q=&a;*p=*q;
int a=b=6,*p;p=&a;b=*p;
int a,*p,*q;q=&a;p=*q;
以上的指针变量的操作是不正确的,为什么?
因为是初学者,还没搞明白,请详细解释下,谢谢!

指针变量的值实际上就是一个内存的地址。
比如
int rem,*prem=&rem;
变量rem就是一个int类型的变量,prem就是一个指向int类型的变量。
&是取地址运行,&rem就是取出rem变量在内存的位置,它的位置是用一个16进制的数值表示。
*prem=&rem就是把rem的地址值赋给prem指针变量啦,所以,prem的值就是rem在内存里的位置值。
同时因为prem本身也是一个变量,所以,prem也是在内存中的,也有自己的位置值,即在内存的地址。
int a=5,*p,*p=a;错在p是指针,所以赋值只能赋个变量的地址给它,但如果你硬要赋一个随便的值给它也可以的,比如,p=0x100,这就表示指针p指向内存地址0x100。*p就表示p指针所指向的变量了。 所以,这里应该这样写的:
int a=5,*p;p=&a;
*p=a,是没错的,这里错是错在,执行*p=a之前p没赋值 。就是说如果都还没有告诉p指向到内存中的哪个位置,*p是没意义的,*p就相当p指向内存的位置了,就是把a的值赋给p指向内存的位置。
同理int a=5,*p,*q=&a;*p=*q; 也是这样的错。p没赋值。

int a=b=6,*p;p=&a;b=*p; 这个没错。但没实际意义,b最后还是等于a等于6。
int a,*p,*q;q=&a;p=*q; 这个你就自己分析啦

1.int *p之后没初始化,也就是说p指向一个未知的地址,这时你用*p=a赋值肯定错,应该是p=&a;下面都是这个问题,后面p=*q,一般不给指针赋数值,要知道,指针的值应该是一个16进制表示的地址(简单的这么说)