react 前端框架如何驱动企业数字化转型与创新发展
1328
2022-11-28
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 运行结果: memset()函数 所属头文件: _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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~