【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的编译器会报错了,并且还会给出具体的提示):

低些版本的,可能访问a[10],a[11],a[12]才报错,访问a[15]开始可能就不报错了。

相关推荐
海上Bruce3 小时前
C primer plus (第六版)第十二章 编程练习第3题
c语言
SundayBear3 小时前
零基础入门MQTT协议
c语言·单片机
我能坚持多久3 小时前
D16—C语言内功之数据在内存中的存储
c语言·开发语言
福楠4 小时前
C++ STL | map、multimap
c语言·开发语言·数据结构·c++·算法
极客小云5 小时前
【基于 PyQt6 的红外与可见光图像配准工具开发实战】
c语言·python·yolo·目标检测
Ethernet_Comm5 小时前
从 C 转向 C++ 的过程
c语言·开发语言·c++
爱编码的小八嘎8 小时前
c语言对话-1.auto_ptr再回忆
c语言
嵌入小生0078 小时前
基于Linux系统下的C语言程序错误及常见内存问题调试方法教程(嵌入式-Linux-C语言)
linux·c语言·开发语言·嵌入式·小白·内存管理调试·程序错误调试
W_a_i_T9 小时前
【Coding日记】菜鸟编程C语言100例——第一题
c语言·学习·编程思维·菜鸟编程
程序员_大白9 小时前
区块链部署与运维,零基础入门到精通,收藏这篇就够了
运维·c语言·开发语言·区块链