C/C++ int数组初始化
一、一维数组
C/C++初始化
- 静态数组 int array[100]; //定义了数组array,但并未对数组初始化;
- 静态数组 int array[100] = {0}; //定义了数组array,并将数组元素全部初始化为0;
- 静态数组 int array[100] = {1}; //定义了数组array,并将数组第一个元素初始化为1,后面99个元素初始化为0;
- 静态数组 int array[100] = {4,5}; //定义数组array,并初始化前两个元素为4,5,后面剩余元素初始化为0;
C++动态数组初始
- 动态数组 int *p_array = new int[100]; delete []p_array; //分配了长度为100的数组array,并全部初始化为0;
- 动态数组 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++初始化
- 静态 int array[10][10]; //定义数组,并未初始化(脏数据)
- 静态 int array[10][10] = {{1},{2,2},{3,3,3}}; //数组初始化了array[0][0]及array[1][0,1]及array[2][0,1,2],剩余元素初始化为0;
C++动态数组初始
- 动态 int (*array)[n] = new int[m][n]; delete []array; //默认初始化为0;
- 动态 int *array = new int[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构,默认初始化为0;
- 动态 int *array = new int[m][n]; delete []array; //数组按行存储,默认初始化为0
三、三位数组
C++动态数组初始
int *array = new int[m][3][4]; //只有第一维可以是变量,其他维数必须是常量,否则会报错
delete []array; //必须进行内存是否,否则内存将泄漏;
四、数组作为参数形式传递
一维数组传递
- void func(int *array);
- void func(int array[]); //真实使用时,一般还需要给数组大小
二维数组传递
- void func(int **array);
- 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数组初始化相关推荐
- int数组初始化_Java中到底有没有多维数组
Java 中没有多维数组的概念,从数组底层的运行机制上来看 Java 没有多维数组,但是 Java 提供了支持多维数组的语法,可以实现多维数组的功能. Java 语言里的数组类型是引用类型,因此数组变 ...
- int数组初始化_Java数组
###理解数组 Java的数组要求所有的元素为相同数据类型.既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有元素的类型相同就可以. 一旦数组的初始化完成,数组在内存中占用的空间就被固定下来 ...
- c/c++ int数组初始化/重置为0
1.int数组其实初始化的时候默认就是全部为0 int a[1000]; int a[1000] = {0}; 以上2种写法其实都可以 注意:int a[1000] = {0};这种方法如果想把整形数 ...
- linux c语言 int 数组初始化,c/c++ int数组初始化/重置为0
ACM n-1位数 n-1位数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...
- memset 数组初始化
void *memset(void *s, int ch, size_t n) 1.功能是: 将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址, ...
- c语言定义数组变量初始化为0,c语言数组初始化——int a[N] = {0};
初学数组,以华科的<c 语言与程序设计>为教材,参考了<一站式学习c编程>,后者数组一章有串代码如下 int main(void) { int i, histogram[10] ...
- c++ char数组初始化_c专题指针数组与指针的关联
----在今天开始写文章之前,让我不由的想起高中里面学的一篇文章中一段话语,是荀子写的<劝学>:积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千 ...
- C/C++数组初始化的一些误区
以前我这样初始化一个数组,并自我感觉良好: int a[5] = { 0 }; // 全部初始化为0 这种简单的写法让我非常爽,于是我又想把数组全部初始化为1: int a[5] = { 1 }; / ...
- 【C】数组数组初始化总结
C数组初始化总结 发现一个新方法,可以分段初始化数组 eg:int arrayC[MAX_LEN] = {[1 - 5]=9, [6 - 9] = 8}; 代码如下 #include <stdi ...
- JAVA学习笔记--数组初始化
JAVA中,数组只是相同类型的.用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.数组通过方括号下标操作符[]来定义和使用,要定义一个数组只需在类型名后面加上一个方括号即可,如: int[] ...
最新文章
- er图主码外码怎么看_霸屏了!因为这个老师,广科er纷纷表示要转专业了
- MCSE2003学习之四
- 禁用任何未使用的端口com_[pc玩家]如何在Windows 10中禁用USB端口
- C++统计难题hdu1251
- 324. Wiggle Sort II | 324. 摆动排序 II(降序穿插)
- void类型和void *的用法
- cnpm能用npm install吗_指纹锁一般能用几年? 指纹锁没电了怎么办
- 近期机器学习竞赛汇总~总奖池超三百万人民币!
- 网络协议从入门到底层原理(3)网络互联模型、物理层、数据链路层(CSMA/CD协议、Ethernet V2帧、PPP协议)
- java歌词添加,分享 :java实现 歌词文件的智能命名解决方法
- Java 实例变量 和 实例方法 以及调用
- 超级终端secureCRT-下载及使用
- 快速查看南京商品房销售信息
- 电影《暮光之城》不得不爱
- 动态壁纸安卓_酷玩软件第7期:还在用无声的动态壁纸?短视频壁纸软件(Win+安卓版本)...
- XStream 转换 ListString的方法
- 怎么重新安装服务器系统,重新安装服务器操作系统
- 干货 | 手把手教你搭建一套OpenStack云平台
- Tomcat 优化
- 【转】初入NLP领域的一些小建议