指针所占大小与偏移之间的关系(求助)
指针所占大小由计算机位数决定,与其指向的数据类型无关,P是指针偏移到其指向位置的下一个内存单元。假如我定义int arr={0,1,2,3,4,5,6,7,8,};int p=arr;那么对利用p可以
在64位机上用32位gcc编译指针大小是4个字节,而64位gcc编译指针大小是8个字节。
指针的加减操作和它指向的类型有关。比如他如果指向一个一字节的数据,那么加减操作是以一字节为单位的,比如如下代码输出是99
#include <iostream>
int main() {
char a[100];
char *p1 = a;
char *p2 = &a[99];
std::cout << p2 - p1;
return 0;
}
而下面代码输出是24
#include <iostream>
int main() {
char a[100];
char *p1 = a;
char *p2 = &a[99];
std::cout << (int *)p2 - (int *)p1;
return 0;
}
如果你是说把一个double数组的首地址给一个int指针p的话,这个操作在C++上需要使用强制 类型转换,在C上不需要。
然后,p++操作只会移动4个字节,同时不应该报错,这是可以通过编译并运行的。这个操作理解成换了一种方式解释double数组吧?