首先要明白,二维数组本质上也是一维的,二维只是人为想象出的空间感。
其实二维数组a[i][j]的不同之处在于,它的数组名a是一个二级指针,它直接指向一个指针数组(元素都是指针的数组),a中储存的就是该指针数组的首地址,该指针数组里存储的指针按顺序指向每一行元素的首地址。因此,该指针数组的长度,即为二维数组的行数i。
a[i](即*(a+i))访问的是指向第i行的指针,a[i][j](即*(*(a+i)+j))访问的是第i行第j列的元素。
由此我们可以知道,想要动态地初始化一个二维数组的步骤如下:
1.定义一个二级指针a(以整形为例);
2.使这个二级指针指向一个指针数组,即为a分配长为i的指针数组的地址;
3.通过对a[i]的访问,为二维数组的每行元素申请地址,申请的大小由列宽j决定;

#include<Stdlib.h>
#include<stdio.h>
void main(){int **a;int i=3;int j=4;int k;a = (int **)malloc(i*sizeof(int *));/*为指向每行的指针申请地址*/for(i=0;i<3;i++){a[i]=(int *)malloc(j*sizeof(int));/*为每行的元素申请地址*/for(k=0;k<4;k++)a[i][k]=1;/*赋值,以验证是否成功申请*/}for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%d ",a[i][j]);printf("\n");}
}

运行结果如下:

可见思路与代码无误,大家可以用它来求三行四列的行列式了。

C语言初学者必看--动态定义二维数组的方法相关推荐

  1. C++ 动态创建二维数组

    背景知识: 对二维数组的理解方式至关重要:把二维数组看成是一种特殊的一维数组,它的元素又是一个一维数组. 例如:int a[3][4], 可以理解为定义了3个一维数组,即相当于  a[0], a[1] ...

  2. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  3. C语言-动态创建二维数组

    文章目录 1 前言 2 动态创建的实现方法 2.1 方法1(适用于二级指针传递) 2.2 方法2(模拟C语言数组的储存方式) 1 前言 参照我之前的一篇文章 二维数组做函数的参数 文章中提到,当我们想 ...

  4. python定义二维数组_二维数组的定义、初始化和输出,C语言二维数组详解

    本节学习二维数组.二维数组与一维数组相似,但是用法上要比一维数组复杂一点.后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的.能用二维数组解决的问题用一维数组也能解决 ...

  5. malloc动态创建二维数组(C语言)

    c语言用malloc动态创建二维数组 #include <stdio.h> #include <stdlib.h> void fun(int m,int n){//行数,列数 ...

  6. C语言动态创建二维数组

    在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo. 这里面涉及到几个内存操作的知识点,一个一个的来讲. 1. 创建两个1维数组,用于给二维数组填充值的时候使用. /*2 ...

  7. C/C++定义二维数组(矩阵)

    1. 确定维度定义 int rows=4; int cols=5; int n2Arr[rows][cols];//错误,矩阵维度必须为常数 int n2Arr[4][5]; //正确,定义了4*5的 ...

  8. C++ 动态开辟二维数组的的方法

    近日写到一个程序,用到了要动态开辟二维数组,一想,自己就会两种.一者:用new在堆上开辟:二者:用vector开辟.技巧没有多少,但是确实是折腾了我半天!首先,大家去网上搜一下,动态开辟二维数组的文章 ...

  9. 技术图文:如何在Python中定义二维数组?

    背景 前几天,有位同学问我如下的问题: "temp[0][0]修改后,为什么temp[1][0].temp[2][0]也发生了变化?" "在Python中二维数组是怎样定 ...

最新文章

  1. PowerTip of the Day-Add Help to Your Functions
  2. IO系统性能之一:衡量性能的几个指标
  3. 用户输入与while循环
  4. java多态上转下_(转)java的多态(向上转型、向下转型)
  5. LeetCode Climbing Stairs
  6. ORACLE客户端与服务器连接
  7. 项目不能上线,是开发的锅,还是产品的错?
  8. Redis(3-3):列表类型
  9. 红帽启动oracle,Redhat6.5 + oracle 11gR2 设置数据库开机自启动
  10. About static contructor API changes in cocos2d-...
  11. SpringBoot配置Druid数据源,持久层分别 mybatis,jdbc
  12. 安卓手机浏览器排行_安卓手机性价比排行:小米10至尊纪念版仅排第三
  13. 组件源码——拖动条Slider
  14. 【图像融合】可见光与红外图像融合方法和评价指标
  15. 让360俯首称臣----详细教程含源码
  16. 解析服务器消息失败原因,dns域名解析失败的原因是什么?如何解决?
  17. 开卷有益,学习无止境
  18. Building Maintainable Software-java篇之Separate Concerns in Modules
  19. 一张图彻底理解级联!!!!!
  20. java制作局域网聊天器_基于Java的局域网聊天工具

热门文章

  1. 用MATLAB画出离散幅度和相位谱
  2. orcal-sql函数(三元运算,截取,字符查找函数)
  3. 数学不好是原罪——矩阵分析学习笔记The Matrix(汇总)
  4. openjdk 源码下载地址
  5. 彻底删除Ubuntu启动项
  6. c语言中字符变量与整型变量的相互转化
  7. 关于string头文件
  8. c++ primer 随笔
  9. JsonServer使用详解
  10. html文本字段标签居中,html中实现文本与标签居中的方法