`

对const操作来分配一个数组空间错误

阅读更多
#include       <stdio.h>  

int       main(void)  
{  
                const       int       i       =       2;  
                const       int       a[i]       =       {1,       2};                                           //为什么这里可以编译通过?  
                const       int       b[a[i-1]]       =       {1,       2};                       //为什么这里编译无法通过?  

                return       0;  
}  


C++编译器多数是不会为第一句中的i分配空间的,而是将其放入符号表中,是个编译时期的常量,这样就保证了编译器在扫描第二句时能通过。而第二句是 const用于集合的情况,但是必须保证编译器不会复杂到把一个集合保存到它的符号表中,所以必须分配内存。在这种情况下,const就意味着“不能改变的一块存储空间”,然而不能在编译期间使用它的值,因为编译器在编译期间不需要知道存储的内容。正因为如此,使得第三句不能编译通过。
1
0
分享到:
评论

相关推荐

    4-1一维数组的基本操作1

    然后,它会分配一个新的内存块来存储数组元素。 - **复制构造函数**:`Array&lt;T&gt;::Array(const Array&lt;T&gt;& v)`用于创建一个与已有数组(v)相同内容的新数组。这里,首先获取原有数组的大小,然后为新数组申请相同...

    利用一维数组中的数据构造完全二叉树

    对于一个完全二叉树来说,如果根节点存储在一维数组的第0个位置,那么其左右子节点将分别位于第2i + 1和2i + 2的位置(其中i为父节点的位置索引)。例如,数组`[1, 4, 3, 45, 23, 6, 7, 9, 15, 56]`表示的完全二叉树...

    iccavr中存储空间的分配.docx

    ICCAVR 中存储空间的分配是指在ICC编译器中对数组、字符串和指针变量的存储空间的管理和分配。了解 ICCAVR 中存储空间的分配是非常重要的,因为它直接影响着程序的执行效率和可靠性。 在 ICCAVR 中,对数组和字符串...

    ELS.rar_数组作为引用

    `创建了一个对board的第ROW行的引用,这样我们就可以通过`rowRef`快速访问或修改这一行的所有单元格。 在实现旋转功能时,如果直接操作原数组,可能会导致错误,因为旋转方块涉及到元素的位置交换。使用数组引用,...

    C++中const用法.pdf

    4. **节省空间**:对比于预处理宏`#define`,`const`定义的常量在内存中只有一个拷贝,减少了内存消耗。例如,使用`const`定义的常量`Pi`在首次分配内存后,后续引用不再分配内存,而`#define`定义的宏会在每次使用...

    c语言const的用法程序设计语言.pdf

    首先,const是C语言中的一个限定符,用于声明变量为常量,意味着该变量的值在初始化之后不可以被修改。常量变量在编译时就已经确定了值,对于提高代码的安全性和可读性都非常有帮助。 在给出的例子中,我们可以看到...

    const的作用

    **问题:** 在以下示例中,为何使用`const`变量来初始化数组时,ANSI C编译器会报告错误? ```c const int n = 5; int a[n]; ``` **答案与分析:** 1. **常量与只读变量的区别:** 常量是编译时期确定且无法更改的值...

    C语言中二维字符数组[文].pdf

    ` 创建了一个指向字符指针的指针,然后可以逐个元素分配内存,如`str[i] = new char[ strlen(string) + 1 ];`。这种方式更灵活,但需要谨慎管理内存,避免内存泄漏。 3. 字符串分布: - 在C语言中,字符串是以空...

    有答案,华为,嵌入式软件工程师,试题汇_20201207140354.pdf

    预编译、指针、数组、内存空间、sizeof 用法、指针位数、数组指针、内存分配 华为嵌入式软件工程师试题汇总是关于嵌入式软件工程师的一些重要知识点的汇总,涵盖了预编译、指针、数组、内存空间、sizeof 用法、指针...

    使用vector申请多维数组

    另一种方法是使用一个单维 `vector` 并通过偏移计算来模拟多维数组。例如,对于二维数组,我们可以存储所有元素在一个 `vector` 中,然后通过行和列索引来计算实际的下标: ```cpp std::vector&lt;int&gt; flatArray; ...

    华为嵌入式面试题

    * 数组和指针的区别:数组是静态定义的,具有自己的内存空间,而指针只是一个指向内存地址的变量。 * sizeof 运算符的使用:sizeof 运算符只能用于静态数组,无法检测动态分配的或外部数组大小。 四、指针的位数 *...

    c++内存分配1

    本文主要讨论的是C++中内存分配的几个关键知识点,包括内存区域、分配方式、管理方式以及常见的内存错误及其对策。 首先,C++中的内存分为五个主要区域: 1. 栈(Stack):这是由编译器自动管理的区域,用于存储...

    const的用法

    标题:"const的用法" 描述:"和大家一起分享下CONST的用法!!!" 标签:"C++" 【知识点详述】 ...**C++中的const关键字:详解与应用** ...熟练掌握`const`的用法,是每一个C++程序员不可或缺的技能之一。

    C语言深度进阶篇-王桂林-

    - **堆上一维空间**:在堆上分配一维数组空间,通常用于动态分配数组。 - **返回值返回(一级指针)**:函数返回堆上分配的数组的指针。 - **参数返回(二级指针)**:通过传入二级指针作为参数,函数可以修改该指针...

    C++中静态初始化数组与动态初始化数组详解

    在C++编程中,数组的初始化是进行数据操作前的一个重要步骤,它直接影响到程序的运行效率和内存管理的复杂性。本文将对C++中的两种数组初始化方式——静态初始化与动态初始化进行详解,帮助读者更好地理解和应用这两...

    C++第一次大作业

    你的Set应该使用一个数组来存储成员并且数组应该使用new在堆上分配. 当set被创建时,它有一个指定的尺寸(指数组). 如果它满了, 必须从堆中开辟更多的内存. 这个将会在某一次Add()函数的期间. 如果set中有太多空的...

    C++99个常见错误

    这些错误可能是语法错误、逻辑错误,或者是对C++特性的误解。下面,我们将详细讨论一些C++中常见的错误类型,以及如何避免它们。 1. **内存管理错误**:C++允许程序员直接管理内存,这可能导致内存泄漏或野指针。...

    再再论指针,指针的深入分析

    `,这里`arr`是一个包含两个元素的数组,每个元素都是一个包含三个整数的数组。 - **多维数组**通常指的是具有多个维度的数组,例如`int arr[2][3];`。在这个例子中,`arr`是一个二维数组,而不是数组的数组。 虽然...

    C语言错误种类总结.pdf

    16. Cannot modify a const object(不能修改一个长量对象):对定义为常量的对象进行不合法操作(如常量赋值)引起本错误。 处理方法:检查常量对象的操作是否合法。 17. Case outside of switch(Case出现于...

Global site tag (gtag.js) - Google Analytics