代码编织梦想

假设存在下面一个数组,要求用函数访问该数组

int a[2][3]=

{

{1,2,3},

{4,5,6},

};

1.

void show_array(int *a,int M,int N)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

printf("%d ",*(a+i*N+j));

}

printf("\n");

}

}

二维数组里面的某一行的第一个元素的地址也代表了本行的地址,具有双重身份

二维数组名也是一个地址,就是a=a[0]=&a[0][0]

二维数组作为形式参数,a是一个一阶指针,用来存储普通变量的地址

这个函数是通过a,数组第一个元素的地址,然后自己计算行列来遍历访问二维数组。

show_array(a,3,3);//vs2012不可行

show_array(a[0],3,3);

show_array((int*)a,3,3);//强制类型转化二阶转化一阶

show_array(*a,3,3);//*a表示a[0];

下面的不对,本来以为二维数组就应该和二阶指针对应,后来发现不是。

二阶指针存储的必须是一个指针变量的地址。但是a[0]是一个地址常量,

表示的是数组第一行的地址,只是在数值上满足*a=&a[0][0]=a[0];

所以下面错了。在main函数中直接传递show(a,3,3)类型根本就不符合

void show_array(int **a,int M,int N)

{

inti,j;

for(i=0;i

{

for(j=0;j

{

printf("%d ",*(*(a+i)+j));

}

printf("\n");

}

}

在二维数组做形式参数的时候第二维不可省略,这里传递了一个指针数组,来存储每一行

的行首地址。所以正确,传递时候的参数是show_array2(a,3);

void show_array2(int (*a)[3],int M)

{

inti,j;

for(i=0;i

{

for(j=0;j<3;j++)

{

//printf("%d ",a[i][j]);

printf("%d ",*(a[i]+j));

}

printf("\n");

}

}

如果一定要用二阶指针访问二维数组,需要先用一阶指针数组先存储每一行的首地址,然后在用二阶指针存储一阶指针的地址,这是在主函数里面实现的。

int *p[2] = {a[0], a[1]};

int **pp = p;

然后就可以利用二阶指针pp进行访问了。

c语言 二维数组-爱代码爱编程

# 二维数组基本概念 ##1.二维数组的基本概念 - 所谓多维数组就是一个一维数组的每个元素又被声明为一 维数组,从而构成二维数组. 可以说二维数组是特殊的一维数组。 - 示例     +int a[2][3]     +可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素 ##2.二维数组的定义 -

c语言:指针篇(三)用指针访问二维数组 & 实例分析_lily_9的博客-爱代码爱编程_指针访问二维数组

之前对指针的认识并不深入,最近在做图像处理,需要用二维数组存储图像数据,发现用指针访问二维数组的规律,感觉很有意思。 一般,我们定义一个二维数组比如m[2][2]={ 1,2,3,4 },假如想访问第i行,j列的元素,用m[i][j]即可,例如m[1][1]=4。 那么二维数组的元素到底是怎么存储的,每个元素的实际地址是怎样的呢? 实际上,从上图

c语言二维数组-爱代码爱编程

c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一,形参给出第二维的长度。 例如: #include void func(int n,  int a[][size]) {   /* access array */   a[i][j]; } void main() {   int a[10][10];   fun

通过指针访问二维数组的三种方法-爱代码爱编程

下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针、指针数组、数组指针、指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助。 程序如下: #include <stdio.h> int main() { int i, j; int score[3][4] = { {65,67,70,60},

二维数组的定义和访问-爱代码爱编程

一:二维数组的定义有很多方式,几种常见的方式如下: 第一种方式: int[][] arr = new int[3][4]; 上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示:   第二种方式: int[][] arr = new int[

C语言数组——二维数组-爱代码爱编程

C语言目录 C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语言程序的7个步骤和编程机制C语言基础-第一个C程序C语言基础-简单程序分析VS2019编写简单的C程序示例简单示例,VS2019调试C语言程序C语言基础-基本算法C语言基础-数据类型C语言中的输入输出函数C语言流程控制语句C语言数组——一维数组

访问二维数组的四种方式-爱代码爱编程

#本文列举了访问二维数组的四种方式 当成一维数组来访问二维数组使用数组指针的方式访问二维数组使用指针数组的方式访问二维数组使用指针的指针&指针数组代码如下: #include<stdio.h> #include<string.h> void main() { /******遍历二维数组的4种方式********/

(五)C语言之二维数组-爱代码爱编程

今天的第二个内容单独拿出来讲一下,对于初接触C语言的人来说,这个知识点比较难懂,后面在讲指针的时候我还会提到这部分的内容,看不懂的同学可以看后面的内容。 指针变量可以指向一维数组中的元素,当然也就可以指向二维数组中的元素。但是在概念和使用方法上,二维数组的指针比一维数组的指针要复杂一些。要理解指针和二维数组的关系首先要记住一句话:二维数组就是一

C语言二维数组概述-爱代码爱编程

二维数组定义的一般形式:类型说明符 数组名[常量表达式][常量表达式] 例如:定义一个3行4列的数组a :int a [3][4]; 可以将二维数组看成是一种特殊的一维数组:它的元素又是一个一维数组。 例如上面数组a,可以将a看成一维数组,它有三个元素,每个元素又包含4个元素的一维数组。 二维数组在概念上是二维的,但在实际的硬件存储器却是连续编址的,也就是

C 语言定义动态二维数组-爱代码爱编程

C语言定义动态二维数组 1 为不能直接定义int [n][n]2 动态定义二维数组的方法 1 为不能直接定义int [n][n] C语言里,所有变量空间都是在程序运行之初向系zd统申请的, 包括指针,除了一些动态申请方式如malloc函数。 没有申请的空间系统是不允许读写的。 那么如果一个数组大小是变量定义, 则在程序运行前不能确定数组大小,

java数组-爱代码爱编程

数组(Array) 1.java语言中,数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object 2.数组是一个容器,可以同时容纳多个元素。(数组是一个数据的集合),数组字面意思是“一组数据” 3.数组当中可以存储基本、引用数据类型 4.数组是一个引用类型,所以数组对象存储在堆内存 5.对于数组中存储是“java对象”的话,实际存储的是对象的”

C 语言之二维数组(详细版)-爱代码爱编程

目录 1.二维数组的定义和初始化 2.二维数组在内存中的存储 3.二维数组的使用 4.数组与函数 1. 二维数组是定义和初始化 1.1 二维数组的定义      定义类型:类型名 数组名[ 行表达式 ][ 列表达式];行与列用常量表达式。 1.2 二维数组的初始化 /** 定义数组 */ int main() { int ar[3][4];

一维数组c语言列举,C++一维数组-爱代码爱编程

定义一维数组 定义一维数组的一般格式为: 类型标识符  数组名[常量表达式]; 例如: int a[10]; 它表示数组名为a,此数组为整型,有10个元素。 关于一维数组的几点说明: 1) 数组名定名规则和变量名相同,遵循标识符定名规则。 2) 用方括号括起来的常量表达式表示下标值,如下面的写法是合法的: int a[10]; in