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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装