请问大家,C语言中指针不是表示地址的一种变量吗?那么地址在64位机是8个字节,指针变量不应该也是8个字节吗?但为什么移动指针比如数组int *p=arr[0],那么只需要加一就可以到arr[1]了,请问是为什么
int指针(也包括别的类型),每+1,自动移动sizeof(int)的大小。
另外,指针大小和指针指向的元素的大小,不是一回事,char * 也是8个字节(在64bit上),但是指向的内存还是1字节
int指针8字节,指向的存储单元还是4字节。
这是规定。
void指针,+1总是移动1个字节。
【以下回答由 GPT 生成】
指针在C语言中是一种特殊的变量,它存储的是某个变量的地址。在64位机器上,地址通常是由8个字节组成。
当定义一个指针变量时,它会占用8个字节的内存空间,用来存储地址。然而,移动指针时只需要加1并不是移动一个字节的位置,而是移动一个数据类型的位置。这是因为指针的类型决定了每次移动的字节数。
例如,若定义一个指向int类型的指针变量int *p
,则每次对指针p
加1,它将会移动4个字节的位置,因为int类型通常占用4个字节的内存空间。
具体解决方案如下所示:
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr; // 指向数组的第一个元素
printf("p 的地址:%p\n", p); // 打印指针变量的地址
printf("p + 1 的地址:%p\n", p + 1); // 移动指针,指向数组的第二个元素
return 0;
}
输出结果:
p 的地址:0x7ffeedfc2580
p + 1 的地址:0x7ffeedfc2584
可以看到,指针变量p
的地址移动了4个字节,也就是一个int类型的大小。
所以说,移动指针并不是移动一个字节的位置,而是根据指针的类型移动对应的字节数。
【相关推荐】