如果c是float类型而* p是指向c的指针。 * p也应该是浮点型。但它** p2是指向* p的指针。它应该是一个int类型??因为所有" *"说是#34;地址的价值"是int类型(在** p2的情况下) 喜欢:
float s=10.50 ;
float *p ;
*p=&s ;
float **p2=&(*p);
上面的行应该是float还是int类型,因为存储在* p的值是s的地址(这是一个整数)?
答案 0 :(得分:0)
您犯的一个错误是,当您拥有命令时取消引用指针
float **p2=&(*p);
相反,你想写下的内容是:
float **p2=&p;
这样你就可以有一个指向浮点指针的指针。
答案 1 :(得分:0)
指针是内存中的地址。并且地址可以是浮点变量,int变量或许多此类变量的结构。但指针始终是指针,而不是int或其他任何东西。在某些体系结构上,它可以与整数大小相同。
所以p2这里的指针不是浮点数。甚至p也是指针。
让我们分析一下代码:
*p=&s;
虽然这会给编译器警告(不兼容的赋值),但是你将s的地址复制到p所指的位置。这里的p可能是垃圾,你可能会将s的地址复制到某个垃圾地址。
s的地址可能比int大。 int的大小是4字节,s(int)的地址可以是8字节。 (在某些架构上)
float **p2=&(*p);
以上行与。相同 float ** p2 = p;
因此p2与p具有相同的值,这是一些垃圾未初始化的地址。
答案 2 :(得分:0)
星号是C类型的一部分。 因此,您定义的三个变量属于以下类型:
(float)
(float *)
(float **)
每个星形意味着额外的间接或指针级别。 '浮动'部分总是指解开指针后你最终得到的东西。事实上,CPU可能会将指针视为类似于' int-like'类型与其工作方式无关。