【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开始可能就不报错了。

相关推荐
2601_9555181815 小时前
C语言标准演化史:从K&R到GNU,谁才是正统?
c语言·gnu·标准演化·ansic·性能与可移植性
程序员zgh16 小时前
C++ 拷贝赋值运算符 详解
c语言·开发语言·c++
小婷一直在努力17 小时前
自定义类型:联合和枚举
c语言·联合和枚举
夕阳23018 小时前
做耳机开发,需要掌握哪些 C 语言知识?
c语言·开发语言·#蓝牙开发·#蓝牙技术
weixin_4568083818 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件
HJX_072418 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
haolin123.19 小时前
类和对象(下)
c语言·开发语言·c++
(Charon)1 天前
【C++】手写 MySQL 连接池(三):异步任务队列与工作线程
c语言·c++
加油码1 天前
共享内存详解:原理、系统调用与高性能进程间通信
linux·c语言·c++
Lzh编程小栈1 天前
【STM32底层精讲】RCC时钟系统超全详解(时钟树+源码+避坑指南)
c语言·stm32·单片机·嵌入式硬件·面试