在数组赋值指针过程,指针的地址分配问题。
数组的地址分配与数组类型相关,指针地址分配与操作系统位数相关。
但是该示例中,数组 x[] 与 指针 p 的地址分配有概念能理解,但是在指针 p+1 时分配的地址却与 x[]数组第一个元素 x[0],指针 p 中所保存的值一样!
为何会产生不符合预期的地址分配,这样分配地址的原理是什么?
指针 p 保存的值与 指针 p + 1所被分配的地址一样,这样在后续指针调用过程中不会产生无法预计的错误吗?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int *p = x;
printf(" x 的地址为 %p\n", x);
printf(" &x 的地址为 %p\n", &x);
printf(" x[0] 的地址为 %p\n\n", &x[0]);
printf(" p 的值为 %p\n", p);
printf(" *p 的值为 %d\n", *p);
printf(" &p 的地址为 %p\n\n", &p);
printf(" x[1] 的地址为 %p\n", &x[1]);
printf(" p + 1 的值为 %p\n", p + 1);
printf(" *(p + 1)的值为 %d\n", *(p + 1));
printf(" &p + 1的地址为 %p\n\n", &p + 1);
printf(" &(p + 2)地址为 %p\n", &p + 2);
printf(" &(p + 3)地址为 %p\n", &p + 3);
system("pause");
return 0;
}
运行环境是在Dev-c++下:
尝试过在 VScode与 Dev-c++运行,结果一样。
想把这个问题搞清楚,为什么会这么分配,它的分配原理是什么?
xr报到,一入编程深似海,希望能得到各位DL的指导。感谢!!