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

相关推荐
GZX墨痕1 小时前
从零学习直接插入排序
c语言·数据结构·排序算法
Susea&1 小时前
数据结构初阶:双向链表
c语言·开发语言·数据结构
Net_Walke1 小时前
【C数据结构】 TAILQ双向有尾链表的详解
c语言·数据结构·链表
TDengine (老段)1 小时前
TDengine 语言连接器(Node.js)
大数据·c语言·数据库·物联网·node.js·时序数据库·tdengine
长流小哥3 小时前
Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南
linux·c语言·开发语言·网络·udp
幼儿园园霸柒柒3 小时前
第七章:7.2求方程a*x*x+b*x+c=0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值
c语言·开发语言·算法·c#
不知道叫什么呀3 小时前
【C语言基础】C++ 中的 `vector` 及其 C 语言实现详解
c语言·开发语言·c++
硬匠的博客5 小时前
C/C++指针
c语言·开发语言·c++
luoqice5 小时前
C 语言实现 HTTP 和 HTTPS 通信的例程
c语言
汤姆_5117 小时前
【c语言】深入理解指针2
c语言·开发语言