【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?

本篇文章目录

  • [0. 相关文章](#0. 相关文章)
  • [1. 下标从0开始问题](#1. 下标从0开始问题)
  • [2. 数组下标越界不报错问题](#2. 数组下标越界不报错问题)

0. 相关文章

  1. 指针与指针变量
  2. 数组名不是首元素地址的的2个例外
  3. 拨开指针和数组名之间的迷雾

1. 下标从0开始问题

  原因是:数组下标访问本质是"指针解引用操作",而指针又是地址,指针的±运算,+0就是第一个元素的地址。

  例如:

2. 数组下标越界不报错问题

在C语言中分两种情况:

  1. 越界读是不报错的;
  2. 越界写可能会报错。

越界的检查是一种抽查,就像查酒驾一样。C编译器在数组后面设置一些标志位,如果这些标志位的内存被改变值了,那就报错了,不过如果越界超过这些标志位,编译器也是检查不出来的;这也是越界读不报错的原因,仅仅是访问这个内存地址,C编译器并不会察觉。

越界读不会报错:

越界写可能不会报错(VS2022的编译器会报错了,并且还会给出具体的提示):

低些版本的,可能访问a10,a11,a12才报错,访问a15开始可能就不报错了。

相关推荐
布莱克6052 小时前
strcpy 函数详解:作用、用法与安全缺陷
c语言·开发语言·c++·安全
DDXYcoder2 小时前
内存函数与数据存储
c语言
AAA代码批发商4 小时前
Days37 Linux C 网络编程:UDP、TCP 与 HTTP 协议实战详解
linux·c语言·网络
是隼人5 小时前
buuctf-pwn ciscn_2019_n_5题解(学习过程持续 更新)
c语言·学习·安全·pwn入门·ctf入门
水饺编程7 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio
dtq04248 小时前
数据结构 - 线性表 - 双向链表
c语言·数据结构·学习
不正经学生12 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技12 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
xiaobobo333016 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
惜离殇17 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io