黑马程序员技术交流社区

标题: 为什么我这么定义数组会出错,基础视频里边没听懂 [打印本页]

作者: 邱蚓    时间: 2014-6-18 23:11
标题: 为什么我这么定义数组会出错,基础视频里边没听懂
#include<stdio.h>
int main()
{
        int a=5;
        int b[a];
}
作者: 傘が咲く    时间: 2014-6-19 08:12
数组元素个数 不允许 是变量。
作者: haohaoxuexi    时间: 2014-6-19 08:22
数组元素个数不能是变量,第一次见这么写的
作者: liulinjie    时间: 2014-6-19 09:48
快速入门那套视频里讲的是不允许这样定义, 但是零基础那套视频里讲的是可以这么定义的. 可能零基础那套视频比较新, 在Xcode中实验一下, 是允许这么定义的.

二者使用上的区别是,
使用常量或者常量表达式(包括宏定义)指定元素个数时, 在定义数组的同时可以对数组进行初始化.
使用变量或变量表达式指定元素个数的数组, 不可以在定义的同时进行初始化, 必须定义后再赋值.
比如,
// 使用常量或常量表达式, 可以在定义同时初始化
int a[3*3] = {1};       // 初始化后, 未被赋值的元素默认赋值为0
// 使用宏定义, 可以定义同时初始化
#define N 5
int a[N] = {1, 2, 3, 4, 5};

// 使用变量或变量表达式指定元素个数时, 不可以在定义时初始化数组
int n = 5;
// int a[n] = {1, 2, 3, 4, 5};     错误!

// 但是可以先定义数组, 再对数组元素进行赋值
int a[n];                     // 可以这样定义
a[0] = 1; a[1] = 2;     // 可以赋值. 注意: 未被赋值的元素是任意值 (不一定是0)
作者: zys456465111    时间: 2014-6-19 11:30
使用不定长数组的特性是C99中新增的,如果你在用VC++6.0编译的话那么肯定会报错。
不定长数组定义要求:如果使用变量作为定义数组的大小值,那么不可以在定义的同时进行初始化。

    int a = 2;
   // int b[a] = {1,2};//这句是错误的

   //-----这样是正确的
     int b[a];
     b[0] = 1;
     b[1] = 2;

作者: chain    时间: 2014-6-19 17:31
把前面改成 const int a =5 ,后面就可以了
作者: 刘元明    时间: 2014-6-19 17:34
数组元素个数不能是变量




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2