二级指针如何分配动态内存并赋值

来源:互联网 发布:吉他鼓点伴奏软件 编辑:程序博客网 时间:2024/05/17 23:36

先分配行 p = malloc(sizeof(int*)*m) ,再逐行分配列 p[i] = malloc(sizeof(int) * n)

//二级指针如何分配动态内存并赋值#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  的无私奉献!


阅读全文
0 0
原创粉丝点击