是指针指向float还是char的指针总是int?

时间:2015-02-08 21:31:19

标签: c pointers

如果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的地址(这是一个整数)?

3 个答案:

答案 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'类型与其工作方式无关。