指针和数据类型

时间:2018-12-28 14:25:14

标签: c++ pointers

我有以下问题。

鉴于指针保存着一个内存地址的值,为什么允许添加一个整数 数据类型值是指针变量,而不是双精度数据类型?

我的想法:是因为我们假设指针也是一个int,还是因为如果我们添加一个double会增加其长度?

谢谢您的时间。

3 个答案:

答案 0 :(得分:1)

您几乎自己回答了问题:指针是一个内存地址。内存地址是整数。您可以将整数添加到整数中并获得整数。将浮点数添加到整数将为您提供一个浮点数,该浮点数不能用作内存地址。

例如,char *x = 0;是单个字节的地址; char *y = 0.5;是什么意思?一个以某种方式由地址0处的字节的后半部分和地址1处的字节的前半部分组成的字节?这可能是有道理的,但是char *x = 3.1415926;或任何类似的浮点数呢?

答案 1 :(得分:0)

不能通过C的约定将double *(指针)添加到int *(指针)。指针持有内存地址的值[“存储/指向另一个变量的地址”]本质上,在这种情况下是由它的类型int决定的(如果我记得,则为4个字节的内存块)。 double是双精度的64位浮点数据类型。只是无法从最“硬件”级别做到这一点。

答案 2 :(得分:0)

  

我的想法:是因为我们假设指针也是一个int,还是因为如果我们添加一个double会增加其长度?

如果您查看documentation,它会显示:

  

为指向数组元素的指针定义了某些加,减,增和减运算符:此类指针满足LegacyRandomAccessIterator的要求,并允许C ++库算法与原始数组一起使用。

(重点是我的),您应该记住:

*(ptr + 1)

等于:

ptr[1]

并且数组的索引是整数,所以语言没有定义对具有浮点操作数的指针的操作,因为这没有任何意义。