C语言的问题,高手帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:50:04
float a=1,*b=&a,*c=&b;
这是一个错误选项,解释说变量c和&b的类型不匹配,可我不太明白。

这确实是一个容易混淆的问题,不过我尽最大努力给你讲清楚!

每一个指针变量,你都要问问自己, 这个指针的类型是什么,这个指针指向的类型又是什么, 这是两个概念,不要弄混了!当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

所谓匹配就是 指针所指的 变量类型 和定义要他指的变量类型一样

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符
*去掉,剩下的就是指针所指向的类型。
例如:int *b;//int b所指的变量类型为int实体;
int **c;//int * c所指的变量类型为int *(就是指针变量)

而指针本身的类型就只要把变量名取掉;
int *b //指针本身的类型是int *
int **c //指针本身的类型是int **

float a=1,*b=&a,*c=&b;

b是个地址了 再取地址还是二级地址
*c只代表读取一级地址
*c = &b当然不对 显然应该是**c = &b
当然比较牵强
如果你试试看*c = &b编译过程应该也不会报错

一楼的有道理,不过我估计楼主是不是要取引用,

如果是取二级地址,就应该按一楼那样
float a=1,*b=&a,**c=&b; 不会报错

如果是取引用就是
float a=1,*b=&a,* &c=b;
c和b等价,引用具体参加:
http://baike.baidu.com/view/5976.htm

float a=1,*b=&a,**c=&b; 不会报错

变量b是float型的指针,你把b的地址复制给c,c应该是float型指针的指针,所以,声明的地方应该把*c改成**c