C/C++ int数组初始化

C/C++ int数组初始化一、一维数组C/C++初始化静态数组intarray[100]; //定义了数组array,但并未对数组初始化;静态数组intarray[100]={0}; //定义了数组array,并将数组元素全部初始化为0;静态数组intarray[100]={1}; //定义了数组array,并将数组第一个元素初始化为1,后面99个元素初始化为0;静态数组intarr…

大家好,又见面了,我是你们的朋友全栈君。

一、一维数组

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161083.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 理查德•弗曼学习法思维导图-程序猿学习法

    理查德•弗曼学习法思维导图-程序猿学习法理查德•弗曼学习法思维导图-程序猿学习法

    2022年6月12日
    29
  • OpenGrok简单使用说明「建议收藏」

    OpenGrok简单使用说明「建议收藏」opengrok查看android源码简单的使用说明,快速搜索定位代码位置。。

    2022年5月6日
    54
  • Android开发笔记(序)写在前面的目录[通俗易懂]

    知识点分类一方面写写自己走过的弯路掉进去的坑,避免以后再犯;另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平。因此博主就想,入门的东西咱就不写了,人不能老停留在入门上;其次是想拾缺补漏,写写虽然小众却又用得着的东西;另外就是想以实用为主,不求大而全,但求小而精;还有就是有的知识点是java的,只是Android开发也会经常遇上,所以蛮记下来。个人的经验…

    2022年4月14日
    41
  • VS注册登录不显示界面内容「建议收藏」

    VS注册登录不显示界面内容「建议收藏」有时候在VS里登录微软账号,登录界面内容迟迟显示不出来,如下图所示.这样的问题可能是你用的公共网络,我一般是把网线拔了,用手机USB共享网络,就可以登陆了.公共网络自己的手机USB共享网络…

    2022年8月22日
    5
  • 信号处理中包络是什么意思_重庆邮电大学复试通信原理

    信号处理中包络是什么意思_重庆邮电大学复试通信原理第一章绪论1.基带信号的定义基带信号是指信号的频谱从零频附近开始的,没有经过调制的信号2.什么是数字信号和模拟信号?二者的区别是什么?数字信号是信号参量的取值是离散的,模拟信号是信号参量的取值是连续的。区别是信号参量的取值是连续还是离散。3.什么是数字通信?描述数字通信系统的主要优缺点?数字通信就是用数字信号传输信息的通信系统。数字通信系统的优点有差错可控,抗干扰能力强,易于存储,处理和…

    2022年8月10日
    7
  • C语言学生成绩管理系统源代码

    C语言学生成绩管理系统源代码大学C语言实训课,C语言学生成绩管理系统。#include<stdio.h>#include<string.h>#include<math.h>structstudent { intnum; charname[20]; floatpingshi; floatshiyan; floatkaoshi; double…

    2022年5月19日
    203

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号