m0_52438464 2022-09-22 21:39 采纳率: 66.7%
浏览 38
已结题

指针地址的分配问题?

在数组赋值指针过程,指针的地址分配问题。
数组的地址分配与数组类型相关,指针地址分配与操作系统位数相关。
但是该示例中,数组 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++下:

img

尝试过在 VScode与 Dev-c++运行,结果一样。

想把这个问题搞清楚,为什么会这么分配,它的分配原理是什么?
xr报到,一入编程深似海,希望能得到各位DL的指导。感谢!!

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-26 09:02
    关注

    概念要分清,p是指向数组x[]的指针,这里只定义了一个指针变量p,不存在指针 p+1 时分配的地址。p+1 = 首地址 + 偏移量,它得到的值是数组x[]空间范围内里某个元素的地址。&p+1 = 指针p的地址 + 1个指针单位的偏移量,这个空间是不可控的,因为这个空间并未被定义,所以这个值没有意义的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真