zoukankan      html  css  js  c++  java
  • [置顶] 二级指针如何分配动态内存并赋值

    先分配行 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("请输入数组的行数和列数:
    例如格式:5,6  :代表5行6列
    ");
        scanf("%d,%d", &m, &n);
        p = malloc(sizeof(int*)*m); //这里没必要强制类型转换 p已定义成int**
    
        if(!p) { //作个简单的malloc是否成功的检测
            printf("malloc失败!
    ");
            return 1; //失败后直接退出程序
        }
    
        for(i = 0; i < m; i++) {
            p[i] = malloc(sizeof(int) * n);
            if(!p[i]) { //还是要检测内存开辟是否成功
                printf("i = %d	malloc失败!
    ", i);
                return 1; //失败后直接退出程序
            }
        }
    
            //这里也没必要强制类型转换 p[i]默认就是int*
        printf("请输入数组的%d行和%d列的数组数值
    ",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列的数组数值打印出来
    ",m,n);
        for(i = 0; i < m; i++) {
            for(j = 0; j < n; j++) {
                printf("%d ", p[i][j]);
            }
    
            printf("
    ");
        }
        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  的无私奉献!


  • 相关阅读:
    线程基础知识归纳
    并发编程情况下几个相应问题简介
    Spring Security的RBAC数据模型嵌入
    Mysql插入中文的字段内容时乱码的解决方法
    部分排序算法总结
    sendEmail 阿里云使用587端口
    linux服务器关闭ipv6 方法
    centos 6.8 安装git 报错
    强大的xargs
    nfs环境搭建报错clnt_create: RPC: Program not registered
  • 原文地址:https://www.cnblogs.com/alan666/p/8311781.html
Copyright © 2011-2022 走看看