黑马程序员技术交流社区

标题: c语言 数组初始化 [打印本页]

作者: 愿我能    时间: 2014-4-26 19:15
标题: c语言 数组初始化
  1. int ages[5];
  2.     ages = {10, 11, 12, 14};
  3. //是错误的写法
  4. int ages[5];
  5.     ages = {10, 11, 12, 14};
  6. //为什么是正确的,表示视频中老师好像没有具体讲,只说了下面也是错误的
  7. int ages[count] = {10, 11, 12};
复制代码

作者: m573555543    时间: 2014-4-26 19:25
数组可以用一个列值来初始化,例如
         int v1[] ={1,2,3,4};
当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1为 int[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如:
         char   v3[2] ={'a','b',0};   //错误:太多的初始化值了
         char   v3[3] ={'a','b',0};   //正确如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为   0。例如
         int   v5[8]={1,2,3,4};
等价于
          int   v5[8]={1,2,3,4,0,0,0,0};


作者: 251638256    时间: 2014-4-26 19:45
三个都是错误的
第一个和第二个问题是数组只允许在定义的时候初始化列表
只能这样写
int ages[5] = {1,2,3,4,5};
第三个问题: 如果变量count是一个宏(#define定义)或const常量 且 count的值大于初始化列表参数的数量就不会出错

因为在C/C++中 定义一个数组必须显示地指定数组的元素数量.简单地说中括号中必须是个整数常量或宏
作者: 傘が咲く    时间: 2014-4-26 22:46
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         /*
  5.         //这样是错误的,应为a是数组的名字,数组名是当前数组的地址,是个常量,不能对其赋值。
  6.         int a[3];
  7.         a = {1,2,3};
  8.         */

  9.         /*
  10.         int a[count];
  11.         //如果这样写,只能通过宏定义的方式对count进行宏定义,不允许数组元素的个数是个变量,
  12.         //因为数组是定长的数据结构。
  13.         */

  14.         //下面是两种数组正确的赋值方式
  15.         int a[3] = {1,2,3};

  16.         int b[3];
  17.         b[0] = 1;
  18.         b[1] = 2;
  19.         b[2] = 3;
  20.         return 0;
  21. }
复制代码

作者: gaoxinglei123    时间: 2014-4-26 22:50
本帖最后由 gaoxinglei123 于 2014-4-27 20:39 编辑

数组就像结构体一样。声明时同时初始化,才能那样写。平时那样写是不允许的。数组在这种情况下声明时 是不能以变量为数组长度的。。只有在函数中才有可能用这种方式
作者: jiangenhao    时间: 2014-4-26 22:52
顺便学习了 数组赋值我一直叫不准
作者: 2的狠正经    时间: 2014-4-26 23:44
数组的初始化 一般分四种
1,就i是 成员全部初始化:int a[3] =(1,2,3)
2,将缺省的成员置为 0: int a[10] = { 1, 2 };
3初始化全部成员为0: int a[10] = { 0 };
4 如果数组个数确定 可以这样写 int a[] ={1,2,3};
如果数组长度不想用数字表示, 可以使用宏定义
#define n 5 这样定义过就可以 实现 int a [n] ={1,2,3,4,5};



作者: Er01c    时间: 2014-4-27 02:00
一维数组名是个指针常量(不允许赋值!),它存放的是一维数组第一个元素的地址
作者: 恣意    时间: 2014-4-27 13:11
1、你的1,2和4,5行有什么区别么?
2、数组元素个数必须是常量,即
   类型说明符 数组名[常量表达式]。
   所以,当count是常量时,7行才是正确的。
   另外,数组名表示该数组的存储地址(指针)是个常量,不   能被赋值

3、数组初始化
   可以只给一部分元素赋值,只赋给前面的元素,剩余的元素   值为0,
   int ages[5]= {10, 11, 12, 14};

作者: 兰闻天    时间: 2014-4-27 13:25
//是错误的写法
int ages[5];
    ages = {10, 11, 12, 14};//这个错误是因为,只有在定义数组的同时进行初始化;
int ages[count] = {10, 11, 12};//这个错误是因为定义数组的时候数组元素个数只能是常量,不能是变量;
//正确写法
1、int ages[5]= {10, 11, 12};//输出未定义的元素的值是0
2、int count = 3;
    int ages[count];
    ages[0]=20;
    这样写是正确是因为你定义数组的时候没有进行初始化,可是这样输出的没有定义的元素的值是不确定的。




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