xcg_klee 2022-10-17 18:08 采纳率: 50%
浏览 27
已结题

c语言指针与数组越界

有人可以帮我简单说一下下面代码的意思吗?感谢!!(我还没有学习到指针)

原本的问题是想知道越界的情况下数据是怎么存储的

#include<stdio.h>

int main()

{int a[5];

int*p=a;

p+= 6;

*p =100;

printf("Adrress%d: %d\n\n",p, *p);

for(int i=0;i<7;i++)a[i]=i;

for(int i=0;i<7;i++ )printf("a[%d]=%d\n" ,i,a[i]);

printf("\nAdrress%d: %d" ,p,*p);

return 0;
}

  • 写回答

3条回答 默认 最新

  • [小G] 2022-10-17 19:11
    关注

    指针

    指针可以简单理解成某个元素在内存中存放的地址,有了地址,我们就可以通过星号*拿出这个地址存放的元素。

    指针定义的时候要加星号*,如int *p,星号只是为了说明这是一个指针变量而已(不要与前面说的"通过星号拿出地址存放的元素"混淆了,定义时加星号只是标记这是一个指针变量,在后面使用的时候,不加星号就表示地址,加星号就表示地址存放的元素,如p表示地址,*p表示该地址存放的元素)

    数组

    再说数组,数组名实际上就是数组在内存中的起始位置(代码中int *p=a,就是把数组a起始地址赋值给了指针p),因为数组在内存中是连续存放的,因此有了起始位置,再给一个与起始位置的距离,如a[i](用指针表示相当于*(a+i)),可以把i理解成距离,这样就可以找到某个具体的元素了。

    还有越界问题,数组创建的时候实际就是在一大块内存划分出一小块连续的没有使用过的内存给这个数组使用,初始化的时候就在这些分配的内存填上对应的初始值。超出的部分就是没有初始化的,是个随机值。因此越界时,应该会得到一个随机值。

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

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月17日

悬赏问题

  • ¥50 swiftui @query 报错
  • ¥50 怎么解决刷卡或扫码后,点击软件输入框,win10屏幕键盘不会自动弹出的问题
  • ¥15 如何使用arcgispro的训练深度模型,发现water和nowater精度为0?(相关搜索:深度学习)
  • ¥20 matlab作业不太懂呀有问题能给个代码吗
  • ¥15 自制电路图为何无法驱动ESP01S?
  • ¥15 前端加access数据库
  • ¥15 ARCGIS 多值提取到点 ERROR 999999
  • ¥15 mysql异常断电, [MY-011971] [InnoDB]
  • ¥15 uni.onBluetoothDeviceFound熄屏不运行
  • ¥15 求PHDA糖尿病并发症数据集,有偿