`
cwqcwk1
  • 浏览: 87395 次
文章分类
社区版块
存档分类
最新评论

C/C++ 数组下标可以是负值

 
阅读更多

我们知道,数组的第一个元素下标是 0。数组的范围也就是从 array[0] 到 array[size – 1]。 但实际上C/C++支持正负下标。 负下标必须在数组边界内;否则结果不可预知。 以下代码显示了正数组和负数组下标:

#include <iostream>
using namespace std;

int main() {
    int intArray[1024];
    for (int i = 0, j = 0; i < 1024; i++)
    {
        intArray[i] = j++;
    }

    cout << intArray[512] << endl;   // 512

    int *midArray = &intArray[512];  // 指向了数组中间的数据

    cout << midArray[-256] << endl;  // 256

    cout << intArray[-256] << endl;  // 得到不可预知的结果
}

最后一行中的负下标可能产生运行时错误,因为它在内存中指向比数组的原点低 256 个字节的地址。 指针 midArray 会初始化为 intArray 的中点;因此可以对其使用正数组和负数组索引。 数组下标错误不会产生编译时错误,但它们会产生不可预知的结果。


参考:http://blog.csdn.net/mycwq/article/details/43373965

https://msdn.microsoft.com/en/library/59682zc4.aspx

分享到:
评论

相关推荐

    C/C++ 避免数组越界的方法

    C/C++ 避免数组越界的方法 C/C++ 中的数组越界是一种常见的错误,它可能会导致程序崩溃或破坏其他变量的数据。为了避免数组越界,程序员需要预先推断数组的大小和边界,并在访问数组时进行严格的边界检查。 首先...

    数组与指针的艺术.doc

    《数组与指针的艺术》是一篇深度探讨C/C++中数组和指针特性的文章,旨在帮助读者理解和掌握这两种核心概念。文章指出,数组和指针是C/C++语言的灵魂,它们提供了对底层操作的强大支持,是语言效率的保证。然而,由于...

    C++动态数组类模板

    //重载[],使Array可以起到普通C++数组的作用 operator T* (void)const; //重载T*,使Array可以起到普通C++数组的作用 int ListSize(void)const; //取数组的大小 void Resize(int sz); //修改数组大小 private: ...

    C/C++ 数组和指针及引用的区别

    C/C++ 数组和指针及引用的区别 1.数组和指针的区别 (1)定义 数组是一个符号,不是变量,因而没有自己对应的存储空间。但是,指针是一个变量,里面存储的内容是另外一个变量的地址,因为是变量所以指针有自己的...

    C/C++之数组与指针的艺术

    通过对数组与指针的深入分析,我们可以看出它们在C/C++编程中的重要性以及独特之处。正确理解和使用数组与指针不仅可以提高程序的执行效率,还能帮助程序员更好地控制程序的行为。尽管初学者可能会遇到一些挑战,但...

    c/c++中文帮助文档(API)

    总的来说,"c/c++中文帮助文档(API)"是一个宝贵的资源,无论你是刚开始接触C/C++,还是已经在编程领域有一定经验,都可以从中受益。通过深入学习和理解这些API,你将能够更好地利用C/C++的强大功能,编写出高效、...

    图像到 C/C++ 数组转换器:此程序将 BMP/TIFF/JPG/PNG 文件转换为单色图像和嵌入的 C/C++ 字节数组。-matlab开发

    该程序将 BMP/TIFF/JPG/PNG 文件转换为嵌入的 C/C++ 字节数组。 当您想在显示器上显示单色图像时,这非常有用。 它在数据数组生成之前将您的图像转换为单色。 源图像中较暗的颜色将产生“开”像素,而较亮的颜色将...

    C++实现数组类

    在C++编程中,数组是一种基础且重要的数据结构,它允许程序员存储一组具有相同类型的数据。数组类的实现是将数组的功能封装在一个类中,提供更方便、更安全的访问和操作方式。以下是对`C++实现数组类`这一主题的详细...

    C/C++数组名与指针区别深层探索

     指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:“数组名就是...

    C/C++中传递多维数组的各种方法

    在 C/C++ 中,可以使用二维数组来传递多维数组。例如,在上面的示例代码中,我们定义了一个二维数组 `score[4][4]`,用于存储四个学生的四门课的成绩。然后,在 `average` 函数和 `search` 函数中,我们使用形参 `...

    C/C++ 数据结构

    C/C++中,可以使用数组或链表来实现栈,但数组栈在预先分配大小时更高效,而链表栈则在动态扩展时更有优势。 最后,树是一种非线性数据结构,由节点和边构成,每个节点可能有零个或多个子节点。常见的树类型有...

    c++数组练习题

    c++数组练习题及答案。本套练习题包含了数组的各方面知识,题型包括判断题 填空题,编程题等

    C/C++中多维数组指针作为函数参数传递程序

    在 C/C++ 中,函数参数传递是将参数传递给函数,以便函数可以访问和处理这些参数。在本文中,我们将讨论如何将多维数组指针作为函数参数传递。 search_score 函数 `search_score` 函数是一个自定义函数,它接受两...

    二维数组下标的重载

    二维数组下标的重载,值得C++初学者的学习

    C/C++实现多维不等宽多维动态数组

    C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组 C/C++实现多维不等宽多维动态数组

    数组中重复的数字(C语言/C++)

    数组中重复的数字(C语言/C++) 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字...

    C/C++笔试题库 (整理版)

    在C/C++语言中,数组的下标范围是从0到n-1,其中n是数组的长度。当数组的下标超过了这个范围时,会导致数组越界问题。例如,在给定的代码中,数组A的下标范围是从0到MAX-1,当i循环到MAX时,A[255]=255;这句代码本身...

    EDA/PLD中的C/C++数组名与指针区别深层探索

    在C/C++编程语言中,指针和数组名之间的关系是一个常见的混淆点,尤其是在EDA(电子设计自动化)和PLD(可编程逻辑器件)领域的软件开发中。虽然这两个概念在某些方面表现出相似性,但它们在本质上是不同的。这篇...

    C/C++指针经典资料大全

    在IT领域,C和C++语言中的指针是至关重要的概念,它们是程序设计的基础,也是许多高级技术的基石。本资源包“C/C++指针经典资料大全”收集了多部经典教材,旨在帮助学习者深入理解并掌握指针的使用。 1. **指针基础...

Global site tag (gtag.js) - Google Analytics