C++ 指针和数据类型

C++ 指针和数据类型,c++,pointers,C++,Pointers,我有以下问题 既然指针包含内存地址的值,为什么允许它添加整数 指向指针变量但不是双精度数据类型的数据类型值 我的想法是:这是因为我们假设指针也是int,还是因为如果我们添加一个double,它的长度会增加 谢谢您的时间。您几乎自己回答了您的问题:指针是一个内存地址。内存地址是一个整数。您可以将整数添加到整数中,然后得到整数。将浮点值添加到整数中会得到一个不能用作内存地址的浮点值 例如,char*x=0是单个字节的地址;什么将char*y=0.5平均值?一个字节,不知何故由地址0的后半字节和地址1

我有以下问题

既然指针包含内存地址的值,为什么允许它添加整数 指向指针变量但不是双精度数据类型的数据类型值

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


谢谢您的时间。

您几乎自己回答了您的问题:指针是一个内存地址。内存地址是一个整数。您可以将整数添加到整数中,然后得到整数。将浮点值添加到整数中会得到一个不能用作内存地址的浮点值

例如,
char*x=0
是单个字节的地址;什么将
char*y=0.5平均值?一个字节,不知何故由地址0的后半字节和地址1的前半字节组成??这可能有道理,但是关于
char*x=3.1415926
或任何类似的浮点数???

您不能通过C的约定将双精度*(指针)添加到int*(指针)上。指针持有内存地址的值[“存储/指向另一个变量的地址”]该值本质上由其类型决定,在本例中为int(如果我记得的话,内存的4字节块)。double是双精度、64位浮点数据类型。只是不能从最“硬件”的层面上做到这一点

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

如果你看,上面写着:

< > >对于数组<元素>强>指针的定义,可以使用某些加法、减法、增量和减量运算符:这样的指针满足LeaCyRyAccess迭代规则的要求,并允许C++库算法与原始数组一起工作。 (重点是我的)你应该记住:

*(ptr + 1)
等于:

ptr[1]

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

什么是
ptr+1.1
的意思?无法寻址子字节。如果要向指针添加double,可以先将其强制转换为整数。诚然,该语言可以为您进行转换,但它选择不进行转换。如果您有一个
const char*text=“abc”
,那么
*(text+1)==“b”
,但是在
*(text+1.5)
,向指针添加整数被称为指针算法,是所有数组索引的基础。例如,对于任何数组或指针
a
和索引
i
,表达式
a[i]
完全等于
*(a+i)
。现在,如前所述,向指针添加分数意味着什么?你不能寻址一个内存单元的位或部分。我认为问题在于,比如,给指针加一个long或long,假设long/long有64位,int有32位,而不是float/double。你可以给你的家庭地址加一个整数,得到别人的地址,但不是1.3。这不是很奇怪吗?“不能用作内存地址”我认为“不能”在这里不是一个正确的术语。它没有意义,所以没有定义。@Slava,我认为两者都有意义:它没有意义,而且一个人在物理上无法寻址部分字节。如果数组元素每个都是4字节,那么在指针上加0.25可以访问特定的字节,但是语言选择不幽默疯狂。“int(如果我记得的话,4位内存块)”-一个
int
的长度通常为4字节