A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 愿我能 中级黑马   /  2014-4-26 19:15  /  1792 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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};
复制代码

9 个回复

倒序浏览
数组可以用一个列值来初始化,例如
         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};

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

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

因为在C/C++中 定义一个数组必须显示地指定数组的元素数量.简单地说中括号中必须是个整数常量或宏

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
gaoxinglei123 来自手机 中级黑马 2014-4-26 22:50:19
报纸
本帖最后由 gaoxinglei123 于 2014-4-27 20:39 编辑

数组就像结构体一样。声明时同时初始化,才能那样写。平时那样写是不允许的。数组在这种情况下声明时 是不能以变量为数组长度的。。只有在函数中才有可能用这种方式
回复 使用道具 举报
顺便学习了 数组赋值我一直叫不准
回复 使用道具 举报
数组的初始化 一般分四种
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:28
8#
一维数组名是个指针常量(不允许赋值!),它存放的是一维数组第一个元素的地址
回复 使用道具 举报
恣意 初级黑马 2014-4-27 13:11:51
9#
1、你的1,2和4,5行有什么区别么?
2、数组元素个数必须是常量,即
   类型说明符 数组名[常量表达式]。
   所以,当count是常量时,7行才是正确的。
   另外,数组名表示该数组的存储地址(指针)是个常量,不   能被赋值

3、数组初始化
   可以只给一部分元素赋值,只赋给前面的元素,剩余的元素   值为0,
   int ages[5]= {10, 11, 12, 14};
回复 使用道具 举报
//是错误的写法
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;
    这样写是正确是因为你定义数组的时候没有进行初始化,可是这样输出的没有定义的元素的值是不确定的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马