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 #求带 python,使用pycharm爬取智联招聘数据资源并保存为Excel文件,同时以图表形式呈现
  • ¥15 学校优化算法怎么样,国内用的多吗?
  • ¥15 微信购物商城购物车的所有功能以及购物车,和首页的搜索功能
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位