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

相关推荐
AI thought4 分钟前
【转】C语言中 -> 是什么意思?
c语言·位移运算符·右移赋值·无符号整数·算术右移
qeen873 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
wuminyu5 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
asdfg12589636 小时前
C 语言中产生伪随机数的标准做法
c语言·开发语言
玖玥拾6 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
Soari7 小时前
llama.cpp更新(b9553):LLM inference in C/C++,本地和云端实现高性能大模型推理
c语言·c++·llama
2601_961194027 小时前
考研资料电子版|去哪找|网盘
java·c语言·c++·python·考研·php
十月的皮皮8 小时前
C语言学习笔记202606008- 三角形判断(3种方法)
c语言·笔记·学习
c++之路11 小时前
C/C++ 全链路编译工具汇总
c语言·开发语言·c++
凡人叶枫11 小时前
Effective C++ 条款02:宁可以编译器替换预处理器
java·linux·c语言·开发语言·c++