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

网友投稿 1328 2022-11-28

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

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]; //不初始化数组

#includeusing namespace std;void show(int* num, int len){ for(int i=0; i

运行结果:

memset()函数

所属头文件: 原型: 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;

运行结果:

换个值初始化试试

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

运行结果:

我们得到了一串随机值

初始化char型数组

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

运行结果:

总结: 对于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;

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)从指向数组的指针变成指向元素的指针

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL存储引擎以及索引
下一篇:C++中的sort
相关文章

 发表评论

暂时没有评论,来抢沙发吧~