0
点赞
收藏
分享

微信扫一扫

C++中的数组初始化问题


动态数组初始化

使用new创建数组的时候,返回的是指向0号元素的指针

int* nums1 = new int[10]{0,1}; //前两个元素用给的值,其他的元素用int类型默认值
int* nums2 = new int [10] (); //使用int类型默认值初始化
int* nums3 = new int[10]{}; //使用int类型默认值初始化
int* nums4 = new int[10]; //不初始化数组

#include<iostream>

using namespace std;

void show(int* num, int len){
for(int i=0; i<len; i++){
cout<<num[i]<<" ";
}
cout<<endl;
}

int main(){
int* nums1 = new int[10]();//使用默认值初始化数组
int* nums2 = new int[10]{};//使用默认值初始化数组
int* nums3 = new int[10]{0,1};//前两个元素用给的值,其他的元素用int类型默认值
int* nums4 = new int[10];//不初始化数组
show(nums1, 10);
show(nums2, 10);
show(nums3, 10);
show(nums4, 10);
delete []nums1;//记得delete,否则会内存泄漏
delete []nums2;
delete []nums3;
delete []nums4;
return 0;

运行结果:

C++中的数组初始化问题_数组

memset()函数

所属头文件: <string.h>
原型: void * __cdecl memset(void *_Dst, int _Val, size_t _Size);
参数说明:

  • _Dst:数组初始化的起始地址
  • int _Val:表示初始化的值
  • _Size:表示初始化的字节范围

作用: 从地址_Dst开始,将字节范围为_Size的内存全部赋值为_Val

案例:

memset(nums4, -1, sizeof(int)*10);
show(nums4, 10);
delete []nums4;

运行结果:

C++中的数组初始化问题_初始化_02


换个值初始化试试

memset(nums4, 1, sizeof(int)*10);
show(nums4, 10);
delete []nums4;

运行结果:

C++中的数组初始化问题_默认值_03


我们得到了一串随机值

初始化char型数组

char c[10];
//上面源码部分第2个参数是int*,但是可以传char型数据
//具体不太清楚,但源码就是这样的
memset(c, 'a', sizeof(char)*10);
show(c, 10);

运行结果:

C++中的数组初始化问题_初始化_04


总结: 对于int类型数组,memset函数只能初始化为0或-1。能初始化char型数组,不能初始化float,double

动态开辟二维数组

int row = 3;
int col = 4;
int** arr2 = (int**)malloc(sizeof(int*) * row);
if (NULL == arr2) {
exit(1);
}
for (int i = 0; i < col; i++) {
arr2[i] = (int*)malloc(sizeof(int) * col);
if (NULL == arr2[i]) {
exit(1);
}
}

printf("%d\n", arr2[1][2]);
printf("%d\n", *(arr2[1]+2));
printf("%d\n", *(*(arr2+1)+2)); // *(arr2+1)使得二级指针变成一级指针

for (int i = 0; i < row; i++) {
free(arr2[i]);
arr2[i] = NULL;
}
free(arr2);
arr2 = NULL;

C++中的数组初始化问题_数组_05

int arr[3][4]; // 数组名表示数组首元素地址,arr包括3个元素
int num = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j] = num;
num++;
}
}
printf("%d\n", arr[1][2]);
printf("%d\n", *(*(arr+1)+2));//*(arr+1)从指向数组的指针变成指向元素的指针

C++中的数组初始化问题_初始化_06


举报

相关推荐

0 条评论