参考了:

http://bbs.csdn.net/topics/310136813

http://blog.csdn.net/sibylle/article/details/2026915

个人新博客,欢迎关注:http://readus.org

一. 数组可以用一个初始列表值来初始化,如下所示:

[cpp] view plaincopyprint?
  1. int array1[] = {1, 5, 8, 9};
  2. char array2[] = {'a', 'c', 'f', 'd', 'a'};
int array1[] = {1, 5, 8, 9};
char array2[] = {'a', 'c', 'f', 'd', 'a'};

1. 当数组定义时没有指定大小,初始化时使用列表值来初始化了,如上所示,则数组大小由初始化时列表元素个数决定,所以array1大小为4,array2大小为5;

2. 如果明确指定了大小,在初始化时,列表的元素个数超过了已指定的大小则会产生错误,如:

[cpp] view plaincopyprint?
  1. char array[2] ={'a','b',0};   //错误:太多的初始化值了
  2. char array[3] ={'a','b',0};   //正确
char array[2] ={'a','b',0};   //错误:太多的初始化值了
char array[3] ={'a','b',0};   //正确

3. 如果初始化时指定的列表元素个数比数组大小少,则剩下的元素都会被初始化为0;如

[cpp] view plaincopyprint?
  1. int array[8]={1,2,3,4};
  2. 等价于
  3. int array[8]={1,2,3,4,0,0,0,0};
int array[8]={1,2,3,4};
等价于
int array[8]={1,2,3,4,0,0,0,0};

4. 字符数组可以方便的用字符串进行初始化,例如:

[cpp] view plaincopyprint?
  1. char string[] = "abcdefghijklmn";
char string[] = "abcdefghijklmn";

二. 使用memset初始化数组

先看看memset的函数说明:

[plain] view plaincopyprint?
  1. MEMSET(3) BSD Library Functions Manual MEMSET(3)
  2. NAME
  3. memset -- fill a byte string with a byte value
  4. LIBRARY
  5. Standard C Library (libc, -lc)
  6. SYNOPSIS
  7. #include <string.h>
  8. void *
  9. memset(void *b, int c, size_t len);
  10. DESCRIPTION
  11. The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
  12. RETURN VALUES
  13. The memset() function returns its first argument.
  14. SEE ALSO
  15. bzero(3), memset_pattern(3), swab(3), wmemset(3)
  16. STANDARDS
  17. The memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').
MEMSET(3)                BSD Library Functions Manual                MEMSET(3)NAMEmemset -- fill a byte string with a byte valueLIBRARYStandard C Library (libc, -lc)SYNOPSIS#include <string.h>void *memset(void *b, int c, size_t len);DESCRIPTIONThe memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.RETURN VALUESThe memset() function returns its first argument.SEE ALSObzero(3), memset_pattern(3), swab(3), wmemset(3)STANDARDSThe memset() function conforms to ISO/IEC 9899:1990 (``ISO C90'').

memset通常用来对一段内存空间全部设置为某个字符,一般情况下用于对定义的字符串进行初始化为 ' ' 或者 ’\0';例如

[html] view plaincopyprint?
  1. char array[100];
  2. memset(array, '\0', sizeof(array));
char array[100];
memset(array, '\0', sizeof(array));

也可这样初始化一个整型数组为0:

[cpp] view plaincopyprint?
  1. int array[10];
  2. memset(array, 0, sizeof(array));
int array[10];
memset(array, 0, sizeof(array));

但是,看下面的例子:

[cpp] view plaincopyprint?
  1. int array[10];
  2. memset(array, 1, sizeof(array));
int array[10];
memset(array, 1, sizeof(array));

是否array中所有的值都为1呢?

答案:不为1,而都是16843009,这是为何呢?

从上面的memset函数说明可以看出,memset的初始化是按字节进行的,在进行memset(array, 1, sizeof(array));调用时,就是对array执行的sizeof(array)个字节进行赋值,每个字节都用ASCII为1的字符去填充,转为二进制后,1就是 00000001,占一个字节,一个 int 类型占4个字节,合起来就是 1 00000001 00000001 00000001,即16843009.就完成了对一个int类型的赋值,所以上面数组中的值都为16843009.

三. 用循环初始化数组

例如:

[cpp] view plaincopyprint?
  1. int array[10];
  2. for(int i = 0; i < 10; ++ i)
  3. array[i] = 0;
int array[10];
for(int i = 0; i < 10; ++ i)array[i] = 0;

这个肯定成功。

转载于:https://www.cnblogs.com/qq292873711/p/3711191.html

一维数组的初始化问题相关推荐

  1. java一维数组初始化_Java一维数组,初始化一维数组详解

    Java语言当中数组必须先初始化,之后才能够使用,那么下面的文章就来给大家讲一下初始化一维数组方面的知识. 所谓的初始化指的就是为数组的数组元素分配内存空间,并且为每一个个数组元素赋初始值. 那么可不 ...

  2. JAVA一维数组如何初始化

    在java中,数组需进行初始化后进行使用 首先,我们先讲数组声明 使用数组之前当然用先进行声明,下面以一维数组举例,声明方法有两种 public class k1 {public static voi ...

  3. 一维数组的初始化问题(函数体内与函数体外)

    数组元素初始化时,若没有显式提供幸元素的值,则元素会被像普通变量一样初始化: 函数体外定义的内置类型数组(即内置类型的全局数组),元素初始化为0: 函数体内定义的内置类型数组,元素无初始化(注意,若只 ...

  4. C语言 一维数组、二维数组的创初始化、使用和存储

    目录 数组 一维数组 一维数组的创建和初始化 一维数组的定义 一维数组的初始化 完全初始化 不完全初始化 一维数组的使用 一维数组的使用代码示例 一维数组在内存中的存储 代码示例 二维数组 二维数组的 ...

  5. 定义一维数组一定要指定个数吗_6.1 C语言一维数组

    01一维数组的定义 1.一般形式 类型符 数组名[常量表达式] 2.数组名的命名规则和变量名相同,遵循标识符命名规则. 3.在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个 ...

  6. 怎么UI数组惊醒初始化 c语言,C语言教案7-数组.ppt

    C语言教案7-数组 C 语 言 程 序 设 计 第 7 章 数组 数组 一维数组的定义 一维数组元素的引用 一维数组的初始化 例7.3:求一组数据的最大值最小值 例7.4:求一组员工的平均工资 例7. ...

  7. c语言提高 17,C语言提高-第17讲: 一维数组的定义和引用(数组大折腾)

    知识点总结: (1)一维数组的初始化 a).在定义数组时分别对数组元素赋予初值,如int a[5]={0,1,2,3,4}; b).可以只给一部分元素赋值,如int a[5]={0,1}; 剩余元素均 ...

  8. c语言一维数组课件,第9章:c语言一维数组课件

    第9章:c语言一维数组课件 随着竞争日益激烈,酒店嘴中的肥肉被大肆抢夺,各大酒店在这场竞争中几乎"溃不成军":就娱乐来讲,大城市里的娱乐场所遍地开花,酒店娱乐业的收入也是日益萎缩. ...

  9. c语言向自定数组_C语言一维数组的定义和引用

    C语言一维数组的定义和引用 C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必须先进行定义.一维数组的定义方式为: 类型 ...

最新文章

  1. linux常用运维工具uptime、iostat、vmstat、sar
  2. HBase 在人工智能场景的使用
  3. Boost中的Timer的使用——计算时间流逝
  4. Vue中使用input简易的上传图片
  5. 1909升级卡64_升级win10 1909后开机数分钟后出现卡死如何解决
  6. [BZOJ] 1610: [Usaco2008 Feb]Line连线游戏
  7. itext汇总 生成pdf
  8. Java — 如何产生随机数(Random类)
  9. MapGISnbsp;K9nbsp;SP3amp;nb…
  10. bootstrap之文字排版
  11. 我要用生锈的机关枪击穿现在
  12. DAOS 分布式异步对象存储|事务模型
  13. java中jsp是什么_JSP是什么?
  14. 多元微积分_旋度2.旋度公式推导
  15. 职高学计算机可以考的大学名单,职高可以考的大学有哪些
  16. UI自动化的po模型
  17. iOS——调用高德地图SDK
  18. Unity中实现涂鸦和橡皮擦功能
  19. sv 数据类型: packed /unpacked/动态数组/联合数组/struct/ enum
  20. C语言实现strcpy和strcmp

热门文章

  1. 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数
  2. C | 看看 C 能做什么
  3. 工厂支持多数据库开发的三层结构模式随笔(一)
  4. telegram定时消息_ActiveMQ(18):Message之延迟和定时消息投递
  5. easyui 图标_logo设计和图标设计有哪些不同?
  6. Checksum 校验和
  7. 基于FPGA实现压缩算法
  8. (75)Xilinx Slice组成结构有哪些?
  9. (127)FPGA面试题-介绍FPGA 门控时钟
  10. (126)FPGA面试题-做了哪些FPGA时序约束?