[置顶] 二级指针如何分配动态内存并赋值
2017-10-21 16:44
204 查看
先分配行 p = malloc(sizeof(int*)*m) ,再逐行分配列 p[i] = malloc(sizeof(int) * n)
http://bbs.bccn.net/thread-440957-1-1.html
非常感谢 longwu9t 的无私奉献!
//二级指针如何分配动态内存并赋值 #include <stdio.h> #include <stdlib.h> int main(void) { int **p = NULL; //最好是显式初始化这个二级指针 以防不测 int m, n, i, j; printf("请输入数组的行数和列数:\n例如格式:5,6 :代表5行6列\n"); scanf("%d,%d", &m, &n); p = malloc(sizeof(int*)*m); //这里没必要强制类型转换 p已定义成int** if(!p) { //作个简单的malloc是否成功的检测 printf("malloc失败!\n"); return 1; //失败后直接退出程序 } for(i = 0; i < m; i++) { p[i] = malloc(sizeof(int) * n); if(!p[i]) { //还是要检测内存开辟是否成功 printf("i = %d\tmalloc失败!\n", i); return 1; //失败后直接退出程序 } } //这里也没必要强制类型转换 p[i]默认就是int* printf("请输入数组的%d行和%d列的数组数值\n",m,n); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { scanf("%d", &p[i][j]); //这里要用& 因为p[i][j]是int型 //或者你改成 *(p + i) + j //scanf("%d", *(p + i) + j); } } printf("将%d行和%d列的数组数值打印出来\n",m,n); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { printf("%d ", p[i][j]); } printf("\n"); } for(i = 0; i < m; i++) free(p[i]); //由里层开始释放开辟的内存 free(p); //只要malloc了就别忘了free return 0; }
http://bbs.bccn.net/thread-440957-1-1.html
非常感谢 longwu9t 的无私奉献!
相关文章推荐
- c++中如何通过函数参数对指针进行赋值
- c++中如何使二级指针能够像数组下标模式访问
- c++中如何通过函数参数对指针进行赋值
- 数据结构预备知识之指针,结构体和动态内存的分配与释放
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同打印G
- 一级指针,二级指针在函数调用传址问题。在子函数中分配内存。
- 动态内存分配以及指针与const
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- 如何理解二级指针删除单向链表
- 对C中动态内存分配( C指针 )的理解
- 复习指针数组以及如何把二维数组赋值给二维指针
- 如何理解字符串赋值给指针与数组的区别
- C语言编程基础-16动态内存分配 二级指针做形参 函数指针
- 动态内存分配涉及到的二级指针,传递相关
- C语言之_动态内存分配、结构体指针、链表
- [指针四] 通过函数进行动态内存申请---二级指针、函数返回值
- c语言中二级指针空间的分配
- 函数的指针如何说明、赋值、调用
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)