一、一维数组

C/C++初始化

  1. 静态数组 int array[100]; //定义了数组array,但并未对数组初始化;
  2. 静态数组 int array[100] = {0}; //定义了数组array,并将数组元素全部初始化为0;
  3. 静态数组 int array[100] = {1}; //定义了数组array,并将数组第一个元素初始化为1,后面99个元素初始化为0;
  4. 静态数组 int array[100] = {4,5}; //定义数组array,并初始化前两个元素为4,5,后面剩余元素初始化为0;

C++动态数组初始

  1. 动态数组 int *p_array = new int[100]; delete []p_array; //分配了长度为100的数组array,并全部初始化为0;
  2. 动态数组 int *p_array = new int[100]{3,5}; delete []p_array; //前两个元素初始化为3和5,后面的原始初始化为0;

曾经我想将int数组元素全部初始化为1,我以为下方的写法没有问题:

int a[5] = { 1 }; // 曾经我想全部初始化为1

事实却是,只有数组的第一个元素被初始化为1,其他全为0;

数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。

对应基本类型int来说,就是补0,再看一下非基本类型的数组:

string a[5] = { "foo" };

有了上面的规则,就很容易知道其实相当于:

string a[5] = { "foo", "", "", "", "" };

即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。

还有一个区别:

int a[5];
string a[5];

如果不明确指出初始化列表,那么基本类型是不会被初始化的(除全局变量和静态变量外),所有的内存都是“脏的”;而类类型则会为每个元素调用默认构造函数进行初始化。

注意,在C++11中中间的赋值号可以省略,即 int a[5]{1};并且,如果初始化列表为空,如 int a[5]{},那将初始化所有元素为默认值,即与 int a[5]{0}; 等级

二、二维数组

C/C++初始化

  1. 静态 int array[10][10]; //定义数组,并未初始化(脏数据)
  2. 静态 int array[10][10] = {{1},{2,2},{3,3,3}}; //数组初始化了array[0][0]及array[1][0,1]及array[2][0,1,2],剩余元素初始化为0;

C++动态数组初始

  1. 动态 int (*array)[n] = new int[m][n]; delete []array; //默认初始化为0;
  2. 动态 int *array = new int[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构,默认初始化为0;
  3. 动态 int *array = new int[m][n]; delete []array; //数组按行存储,默认初始化为0

三、三位数组

C++动态数组初始
int *array = new int[m][3][4]; //只有第一维可以是变量,其他维数必须是常量,否则会报错
delete []array; //必须进行内存是否,否则内存将泄漏;

四、数组作为参数形式传递

一维数组传递

  1. void func(int *array);
  2. void func(int array[]); //真实使用时,一般还需要给数组大小

二维数组传递

  1. void func(int **array);
  2. void func(int (*array)[n]);

数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针,而且在其失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

五、数组重新置0

char数组

char a[10];
memset(a,0,sizeof(a));      //将每个元素设置为0
memset(a,1,sizeof(a));      //将每个元素设置为1
memset(a,'a',sizeof(a));  //将每个元素设置为a,‘a’ = 97 (ASCII码)
也就是说第二个元素要在ASCII码范围内(0~127)。

int数组

int a[10];
memset(a,0,sizeof(a));  //将每个字节设置为0,此时每个int元素正好也为0
memset(a,1,sizeof(a));  //将每个字节设置为1,此时每个int元素为16843009 = 0x1010101
// 0x1010101 = 1000000010000000100000001(二进制)

int数组示例

#include <stdio.h>
#include <string.h>int main ()
{int array[10];memset(array,0,sizeof(array));for(int i=0; i<10; i++){printf("%d\n",array[i]);//输出0}memset(array,1,sizeof(array));for(int i=0; i<10; i++){printf("%d\n",array[i]);//输出16843009}return(0);
}

memset原型

声明:

void *memset(void *str, int c, size_t n)

将str中前n个字节用 c 替换并返回 str。
其实这里面的ch就是ascii为ch的字符;
将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值;

memset()的功能是对str的每一个字节进行ASCII赋值,int占四个字节,所以对int数组进行非0赋值或初始化时不能用memset()函数,只能循环处理/定义时初始化;

参考资料:
https://www.cnblogs.com/SarahZhang0104/p/5749680.html

C/C++ int数组初始化相关推荐

  1. int数组初始化_Java中到底有没有多维数组

    Java 中没有多维数组的概念,从数组底层的运行机制上来看 Java 没有多维数组,但是 Java 提供了支持多维数组的语法,可以实现多维数组的功能. Java 语言里的数组类型是引用类型,因此数组变 ...

  2. int数组初始化_Java数组

    ###理解数组 Java的数组要求所有的元素为相同数据类型.既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有元素的类型相同就可以. 一旦数组的初始化完成,数组在内存中占用的空间就被固定下来 ...

  3. c/c++ int数组初始化/重置为0

    1.int数组其实初始化的时候默认就是全部为0 int a[1000]; int a[1000] = {0}; 以上2种写法其实都可以 注意:int a[1000] = {0};这种方法如果想把整形数 ...

  4. linux c语言 int 数组初始化,c/c++ int数组初始化/重置为0

    ACM n-1位数 n-1位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...

  5. memset 数组初始化

    void *memset(void *s, int ch, size_t n) 1.功能是: 将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值,  第一个值为指定的内存地址, ...

  6. c语言定义数组变量初始化为0,c语言数组初始化——int a[N] = {0};

    初学数组,以华科的<c 语言与程序设计>为教材,参考了<一站式学习c编程>,后者数组一章有串代码如下 int main(void) { int i, histogram[10] ...

  7. c++ char数组初始化_c专题指针数组与指针的关联

    ----在今天开始写文章之前,让我不由的想起高中里面学的一篇文章中一段话语,是荀子写的<劝学>:积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千 ...

  8. C/C++数组初始化的一些误区

    以前我这样初始化一个数组,并自我感觉良好: int a[5] = { 0 }; // 全部初始化为0 这种简单的写法让我非常爽,于是我又想把数组全部初始化为1: int a[5] = { 1 }; / ...

  9. 【C】数组数组初始化总结

    C数组初始化总结 发现一个新方法,可以分段初始化数组 eg:int arrayC[MAX_LEN] = {[1 - 5]=9, [6 - 9] = 8}; 代码如下 #include <stdi ...

  10. JAVA学习笔记--数组初始化

    JAVA中,数组只是相同类型的.用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.数组通过方括号下标操作符[]来定义和使用,要定义一个数组只需在类型名后面加上一个方括号即可,如: int[] ...

最新文章

  1. er图主码外码怎么看_霸屏了!因为这个老师,广科er纷纷表示要转专业了
  2. MCSE2003学习之四
  3. 禁用任何未使用的端口com_[pc玩家]如何在Windows 10中禁用USB端口
  4. C++统计难题hdu1251
  5. 324. Wiggle Sort II | 324. 摆动排序 II(降序穿插)
  6. void类型和void *的用法
  7. cnpm能用npm install吗_指纹锁一般能用几年? 指纹锁没电了怎么办
  8. 近期机器学习竞赛汇总~总奖池超三百万人民币!
  9. 网络协议从入门到底层原理(3)网络互联模型、物理层、数据链路层(CSMA/CD协议、Ethernet V2帧、PPP协议)
  10. java歌词添加,分享 :java实现 歌词文件的智能命名解决方法
  11. Java 实例变量 和 实例方法 以及调用
  12. 超级终端secureCRT-下载及使用
  13. 快速查看南京商品房销售信息
  14. 电影《暮光之城》不得不爱
  15. 动态壁纸安卓_酷玩软件第7期:还在用无声的动态壁纸?短视频壁纸软件(Win+安卓版本)...
  16. XStream 转换 ListString的方法
  17. 怎么重新安装服务器系统,重新安装服务器操作系统
  18. 干货 | 手把手教你搭建一套OpenStack云平台
  19. Tomcat 优化
  20. 【转】初入NLP领域的一些小建议

热门文章

  1. win10系统还原点怎么设置
  2. 下一代Web服务的基础框架——F2F俱乐部SOA系列活动
  3. html选择器的定义和使用,CSS选择器用法大全
  4. 什么是公约数/公因数
  5. 微信小程序授权文件放到域名根目录下
  6. 最火的几颗国产视频芯片
  7. 平安科技软件+金山WPS测试面试题
  8. Flask租房项目总结
  9. 讯飞离线语音合成(语记|语音+)
  10. 西游记中揭示的深刻人生哲理