首页 > 其他分享 >C语言定义并初始化一个二维数组(利用二级指针)

C语言定义并初始化一个二维数组(利用二级指针)

时间:2023-08-06 20:45:18浏览次数:42  
标签:初始化 一个二维 int 内存空间 C语言 ++ 数组 指针

C语言定义并初始化一个二维数组(利用二级指针)

1.代码如下

#include <stdio.h>
#include <stdlib.h>

int main() {
    // m, n表示数组的行数和列数
    int m, n;
    scanf("%d %d", &m, &n);
    // p是一个二级指针,使用malloc函数初始化。注意p指向的是一个指针,所以sizeof操作符的操作数是int*,表示分配一个int型指针的内存空间
    // 分配m个int型指针所占用的内存空间,并将这片内存空间的基地址(首个元素的地址)返回给二级指针p
    int** p = (int**)malloc(sizeof(int*) * m);

    // p[i]是一个指针,每一轮循环都分配n个int型大小的内存空间,并将这片内存空间的首地址返回给p[i]
    for ( int i = 0; i < m; i++) {
        p[i] = (int*)malloc(sizeof(int) * n);
    }

    // 为二维数组的每一个元素赋值
    for ( int i = 0; i < m; i++) {
        for ( int j = 0; j < n; j++) {
            scanf("%d", &p[i][j]);
        }
    }
    
    // 打印每一个二维数组的元素
    for ( int i = 0; i < m; i++) {
        for ( int j = 0; j < n; j++) {
            printf("p[%d][%d]=%d ", i, j, p[i][j]);
        }
        printf("\n");
    }
    
    // 释放指针p[i]指向的内存空间,并将指针的值置为0
    for ( int i = 0; i < m; i++) {
        free(p[i]);
        p[i] = NULL;
    }
    // 释放二级指针p指向的内存空间,并将指针的值置为0
    free(p);
    p = NULL;
    return 0;
}

2.输入输出测试

第一行输入二维数组的行和列

3.代码可视化(pythontutor.com)

在这个网站上无法进行scanf的输入, 因此需要对代码做一写改动才可以在pythontutor.com上运行并可视化。

标签:初始化,一个二维,int,内存空间,C语言,++,数组,指针
From: https://www.cnblogs.com/gjsun/p/17609945.html

相关文章

  • c语言作业之猜数字游戏
    //猜数字游戏#include<time.h>#include<stdlib.h>//void表示“无类型”,相应的void*为无类型指针,即1.对函数返回的限定;2.对函数参数的限定//当函数不需要返回值时,必须用void限定例如:voidfunc(inta,char*b)//当函数不允许接受参数时,必须使用void限定例如:intfunc(void)......
  • C语言定义并初始化一个二维数组(利用指针数组)
    C语言定义并初始化一个二维数组(利用指针数组),可以实现二位数组的每一行的元素个数不同1.代码如下#include<stdio.h>#include<stdlib.h>intmain(){//arr是一个指针数组,即这个数组的所有元素都是指针,每一个元素都指向一个int型数组,每一个int型数组的长度可以不同......
  • 001、认识C语言,第一次编码
    001、认识C语言,第一次编码​ C语言常用于底层开发(应用层之下【操作系统、驱动】)写C语言代码的步骤:创建一个项目;创建一个源文件(xxx.c)【头文件:xxx.h】;写代码;编译代码(ctrl+F7);运行代码(ctrl+F5【不调试】、F5【调试】)主函数(一个工程中只能有一个主函数):/***写C语言的第一步......
  • 【C语言】操作符详解(一)
    1.原码,反码,补码inta=1;整形占用四个字节----32bit00000000000000000000000000000001 (数值位)1.1原码,反码,补码的介绍整数的2进制表示方法有三种,即原码,反码,补码三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,......
  • C语言分支与循环(18) --- 编写一个关机程序
    一.编写一个程序,要求程序运行后电脑一分钟内自动关机,若用户输入:no则取消关机示例代码:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<windows.h>intmain(void){ printf("您的电脑将在一分钟内关机,若需要取消关机请输入no\n"); system("shutdown-s-t60");R......
  • 我的第十一次C语言练习
    #definePI3.14159//intmain(void)//{// intnumber=7;// floatpies=12.75;// intcost=7800;// printf("The%dcontestantsate%fberrypies.\n",number,pies);// printf("Thevalueofpiis%f.\n",PI);// printf("Fare......
  • C语言编程工具软件推荐!
    1、VS(VisualStudio)[VS是目前最受欢迎的适用于Windows平台应用程序的综合开发环境,由于大多数同学使用的都是Windows操作系统,因此VS非常适合大家。在日常课堂和考试中,我们使用的VS2010支持多种不同的编程语言,VS2010最初支持的语言包括:VisualBasic、VisualC#、VisualC++、Vis......
  • Docker-Compose 一键部署mysql及初始化sql脚本
    1.部署前提:服务器具备docker和docker-compose环境2.镜像准备:-mysql:DockerFile文件:FROMmysql:5.7.41COPY*.sql/docker-entrypoint-initdb.d/初始化sql脚本xxx.sql放在DockerFile文件同级目录下执行指令:dockerbuild-fdockerfile_mysql-tmysql:1.0.0.......
  • c语言入门(二)
    八,while与for循环——while与do-while    while(){此括号里需有改变圆括号条件的语句}    do{同前}while()——for循环     for(初始动作;循环条件;每轮循环要做的动作){}......
  • c语言作业之计算1-1/2+1/3-1/4+......1/99+1/100的值
    intmain()//计算1-1/2+1/3-1/4+......1/99+1/100的值{ inti=0; doublesum=0.0; intj=1; for(i=1;i<=100;i++) { sum+=j*1.0/i; j=-j; } printf("%f",sum); return0;}输出的结果为:......