C语言指针问题

C语言中。书上说*p=&a是错的,原因是被赋值的指针变量前不能再加*说明符。书的后面说*p2=*p1是表示把p1指向的内容赋给p2指定的区域。难道后面的那句不是赋值语句吗?

假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。
*p2,*p1都是变量,变量之间互相赋值是正确的。

“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义就变了,而地址只能赋值给指针不能给变量。

最后建议学习看书一定要读国外原著,国内翻译或作者的理解或描述,未必就是正确和合适的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-15
恩,是赋值语句。
比如,有这么几条语句。
int *p1,*p2;
int a;
p1=&a; ①
*p1=&a; ②
*p1=*p2; ③
上面的①是对的,因为p1是指针,只能存储地址,而&是取地址符号,作用就是取变量的地址。
②是错的,因为p1是指针,*p1就是取指针指向的存储内容,是int型的数据,&a是指针型的数据,数据类型不匹配。
③是对的。相当于两个int型数据赋值。
第2个回答  2013-09-15
hoho,我也想过这个问题,其实是一种语法约定啊,少年。*p=&a 这句有时是正确的,有时却是错误的,要分情况。1、定义的时候 int *p=&a; 是正确的赋值语句,这句是初始化用语,等价于下面句子:int *p;p=&a; 2、但是非定义的时候 *p=&a,就是错误的语句了,因为你企图将a的地址赋值于p指针的内容。 这是语法,语法是约定俗成的,没有理由的东西,要记住就行了^____^ 你后面的那句在非定义的时候用是合法的语句,意思是把p2的内容赋值给p1。但是反过来,定义的时候用就错误了,你想想为什么^____^。
相似回答