You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何指向数组的指针自身地址与数组首元素地址不同?

指针自身地址与数组首元素地址不一致是否正常?

问题描述

当使用指针指向数组时,发现指针自身的内存地址与所指向数组下标[0]的内存地址不一致,测试代码及输出如下:

测试代码

#include <stdio.h>

int main()
{
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

int *p = &arr;

printf("Memory address of first index: %p\n", &arr[0]);
printf("Memory address of pointer: %p\n", &p);

return 0;
}

输出结果

Memory address of first index: 000000000061FE00
Memory address of pointer: 000000000061FDF8

请问该现象是否正常?是不是我的机器出现故障了?

解答

这是完全正常的现象,和机器故障没有任何关系。

  • 指针p本身是一个变量,它和数组arr一样存储在栈内存中,&p取的是这个指针变量自身占用的内存地址。
  • 而&arr[0]是数组首元素的内存地址,指针p的作用是存储这个数组首地址的值,而非要求指针自己的地址和数组首地址一致。

简单来说:指针是一个用来存放地址的容器,容器自己有专属的存放位置(&p),容器内部装载的是数组的首地址(p的值),这两个地址本来就不是同一概念。你可以打印p的值验证,它会和&arr[0]完全相同:

printf("Value stored in pointer p: %p\n", p);

这个输出会和&arr[0]的地址完全一致。


内容的提问来源于stack exchange,提问作者Ifeoluwa Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:19