gpt4 book ai didi

c++ - C++中的指针类型有什么意义?

转载 作者:太空狗 更新时间:2023-10-29 19:40:08 25 4
gpt4 key购买 nike

假设我有一些指针叫做:

char * pChar;
int * pInt;

我知道它们都只是保存指向其他位置的内存地址,并且类型声明了特定指针指向的内存位置有多大。因此,例如,一个 char 可能是系统上一个字节的大小,而一个 int 可能是 4 个字节。所以当我这样做时:

pChar++; // I am actually incrementing the address pointed to by pChar by 1 byte;
pInt++; // I am actually incrementing the address pointed to by pInt by 4 bytes;

但是如果我这样做会怎样:

pChar+2; // increment the address pointed to by pChar by 2 bytes?
pInt+2; // increment the address pointed to by pInt by 2 bytes? what happens to the other two bytes?

谢谢.. 在此不胜感激.. 指针类型是否仅用于++ 操作?

编辑:所以 avp 恰本地回答了我的问题,但我有一个后续问题,当我这样做时会发生什么:

memcpy(pChar,pInt,2);

它会复制 2 个字节吗?还是 4 个字节?我会有访问冲突吗?

编辑:根据 Ryan Fox 的说法,答案是 2 个字节,因为它们被类型转换为 (void*)。谢谢!关闭!

编辑:只是为了让 future 的搜索者可以找到这个……我发现的另一条信息……

memcpy(pChar+5,pInt+5,2);

不将 pInt+5bytelocations 指向的内存块的 2 个字节复制到 pChar+5bytelocations。发生的是从 pInt(4*5)bytelocations 复制 2 个字节到 pChar+5bytelocations。难怪我得到了访问冲突,我试图在我不应该阅读的地方阅读.. :)

最佳答案

“++”只是X = X + 1的别称;

对于指针来说,递增 1 还是递增 N 并不重要。无论如何,使用 sizeof(type)*N 。在 1 的情况下,它将只是 sizeof(type)。

所以,当你递增 2 时(你的第二种情况):
对于 char 是 2*sizeof(char)=2*1=2 字节,
对于 int 将是 2*sizeof(int)=2*4=8 字节。

关于c++ - C++中的指针类型有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com