user-0 提问: 数组初始化

回复:
user: user-1
content: 引用 17 楼 qzjhjxj 的回复:引用所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？这里 int a[10] = {1}，后面是大括号{}，就是数组10个元素都被初始化为1，而不是a[0]被初始化为1。如果要a[0]初始化为1，应该是a[10]=1. a[10] = 1;这个操作已经数组越界了，下表最大10-1   建议你自己试试，写几条语句试试，然后再发表看法，或许更有说服力。 一维数组初始化（定义式），不用大括号，你打算用什么来初始化？

user: user-2
content: 引用所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？这里 int a[10] = {1}，后面是大括号{}，就是数组10个元素都被初始化为1，而不是a[0]被初始化为1。如果要a[0]初始化为1，应该是a[10]=1.

user: user-3
content: 引用 15 楼 自信男孩 的回复:[quote=引用 11 楼 SleekStone 的回复:][quote=引用 10 楼 自信男孩 的回复:][quote=引用 8 楼 SleekStone 的回复:][quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.[/quote]所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？[/quote] 对，自测一下就好了～[/quote]我想说的在14楼，不过刚刚看到外面有个帖子https://bbs.csdn.net/topics/398136483，我觉得那里面5楼的兄弟说得有道理

user: user-1
content: 引用 11 楼 SleekStone 的回复:[quote=引用 10 楼 自信男孩 的回复:][quote=引用 8 楼 SleekStone 的回复:][quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.[/quote]所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？[/quote] 对，自测一下就好了～

user: user-3
content: 引用 12 楼 xian_wwq 的回复:[quote=引用 11 楼 SleekStone 的回复:][quote=引用 10 楼 自信男孩 的回复:][quote=引用 8 楼 SleekStone 的回复:][quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.[/quote]所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？[/quote]  确实如此，在环境中跑一下，一目了然[/quote]我的意思不是在怀疑这个结果，我是在怀疑这个表述“int a[10]={0}的时候，10个元素都被初始化为0，int a[10]={1},只有a[0]被初始化为了1，其它被初始化为了0”，这种表述我不知道正不正确，我依稀记得我上学的时候老师说的是“int a[10]={x}，只有第一个元素被初始化为了x，其它元素值是由编译器提供实现的，有的编译器会设成0”，如果我记得没错的话，就意味着对于int a[10]={x}，C++标准只规定了a[0]，初始化为x，其它值标准是不做保证的，我刚才去找了找看能不能找到这个标准，可惜我没找到，如果有朋友找到相关的标准了，也希望告知我一下，

user: user-2
content: 1. 直接给每个元素赋值 int array[4] = {1,2,3,4}; 2. 给一部分赋值，后面的全部为0 int array[4] = {1,2}; 3. 由赋值参数个数决定数组的个数 int array[] = {1,2}; 4. 数组元素的值是随机分配的 int array[4] = {}; 当初始化参数时，推荐使用 int array[4] = {0};

user: user-4
content: 引用 11 楼 SleekStone 的回复:[quote=引用 10 楼 自信男孩 的回复:][quote=引用 8 楼 SleekStone 的回复:][quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.[/quote]所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？[/quote]  确实如此，在环境中跑一下，一目了然

user: user-3
content: 引用 10 楼 自信男孩 的回复:[quote=引用 8 楼 SleekStone 的回复:][quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.[/quote]所以你的意思是：int a[10] = {0}的时候，10个元素都被初始化为了0，int a[10] = {1}的时候，只有a[0] 被初始化为了1，其它都为0？

user: user-1
content: 引用 8 楼 SleekStone 的回复:[quote=引用 6 楼 自信男孩 的回复:][quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？[/quote] 为什么不自己写个程序试一下呢？  除了第一个a[0]为1，其他都是0.  一般初始化，都是初始化为0.

user: user-5
content: 引用 4 楼 自信男孩的回复:[quote=引用 3 楼 m0_51355118 的回复:]错误提示很清楚啊，可变大小的对象不能被初始化。可以先定义int a[k],b[k];然后用memset给数组赋值。像memset(a,0,sizeof(a));这样 k是可变的，数组长度是不确定的～[/quote] c99允许这样定义和使用，只是无法初始化，要另外赋值

user: user-3
content: 引用 6 楼 自信男孩 的回复:[quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.[/quote]int a[10] = {1};这样呢？

user: user-3
content: 引用 5 楼 user-6 的回复:[quote=引用 1 楼 SleekStone 的回复:]int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0不会  有初始化没指定初始化项都会初始化为0[/quote]int a[10] = {1};这样呢？

user: user-1
content: 引用 1 楼 SleekStone 的回复:int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。 这样写，都被初始化为0,10个元素都会被初始化0.

user: user-6
content: 引用 1 楼 SleekStone 的回复:int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0不会  有初始化没指定初始化项都会初始化为0

user: user-1
content: 引用 3 楼 m0_51355118 的回复:错误提示很清楚啊，可变大小的对象不能被初始化。可以先定义int a[k],b[k];然后用memset给数组赋值。像memset(a,0,sizeof(a));这样 k是可变的，数组长度是不确定的～

user: user-5
content: 错误提示很清楚啊，可变大小的对象不能被初始化。可以先定义int a[k],b[k];然后用memset给数组赋值。像memset(a,0,sizeof(a));这样

user: user-1
content: a数组是不确定大小的，大小由n决定。C语言不支持可变数组。楼主可以用动态申请空间形式申请空间（当做数组用）  a = (int *)malloc(sizeof(int) * k); if (!a)     exit(0); memset(a, 0,  k * sizeof(int));

user: user-3
content: int a[10] = {0};这样初始化是可以的，但是只有a[0]被初始化为了0。你这个代码的主要问题在于int a[k]，数组声明的时候，长度应该是个常量，不应该是你这种运行时计算出来的变量。