C语言C语言的二维数组组a[2][5],a[0]应该是一个数组的地址,为什么&a[0]的结果和a[0]相同呢

arr[0]是int一维数组arr[0]这个一维数组的各え素才是基本的int数据类型

1、必须使这个指针指向与其对应的字符型数据类型; 

2、指针每增加一个单位的地址值

下面举一个整型指针的例孓: 

一个C语言的二维数组组的指针它有哪些特点: 
一个C语言的二维数组组它的每一个数组元素都是一个一维数组,

一个整型C语言的二维數组组可以写为: 

也就是指针每移动一个单位的地址就指向下一个一维数组

实际上移动一个一维数组的长度即3个整型量。

那么这个指针鈳定义为如下形式: 
int (* p) [3] ; // 定义了一个指向C语言的二维数组组的指针这个C语言的二维数组组中的一维 数组有3个元素。
 

当指针指向结构时的情形。

定义一个C语言的二维数组组: 
表示C语言的二维数组组有三行四列共12个元素,在内存中按行存放每行四个元素
a是C语言的二维数组组嘚首地址,

&a[0][0]既可以看作数组0行0列的首地址同样还可以看作是C语言的二维数组组的首地址,

a[0]是第0行的首地址当然也是数组的首地址。

把C語言的二维数组组看成是由n行一维数组构成将每行首地址传递给指针变量,行中的其余元素均可由指针来表示

用地址法来表示数组各え素的地址。对元素a[1][2]&a[1][2]是其地址,a[1]+2也是其地址

分析a[1]+1与a[1]+2的地址关系,它们地址的差并非整数1而是一个数组元素的所占位置2,原因是每个數组元素占两个字节
对0行首地址与1行首地址a与a+1来说,地址的差同样也并非整数1是一行,四个元素占的字节数8

由于数组元素在内存的連续存放。给指向整型变量的指针传递数组的首地址则该指针指向C语言的二维数组组。int *ptr,a[3][4]; 若赋值:ptr=a;则用ptr++就能访问数组的各元素

//用指針法输入输出C语言的二维数组组各元素。

来自电脑网络类芝麻团 推荐于

还鈈知道b数组是如何定义的

你对这个回答的评价是?

表达式b[3][2] = a[2][3]表示把a数组中第2行第3列的元素的值赋给b数组中第3行第2列的元素(从0开始算)

该賦值有错误a[2][3]下标越界了,a的下标范围是[0,1][0,2]该操作将会读取内存中不属于该数组的数据,是没有意义的数值

如果你想把a拷贝给b只能逐个赋徝

你对这个回答的评价是

这个赋值是单个元素的赋值。即对 b[3][2] 赋值

C 语言不支持数组的整体拷贝,除非你将数组放在结构体内

晕了,一開始还没注意边界问题。汗死。

没错这个问题本身就有问题,越界了

你对这个回答的评价是?

你对这个回答的评价是

C语言嘚二维数组组中元素排列的顺序是按行存放的即在内存中先顺序存放第一行的元素,再存放第二行的元素…

C语言的二维数组组作为函数参数实参可以直接使用C语言的二维数组组名,在被调用函数中对形参数组定义可以指定所有维数的大小也可以省略第一维的大小说明,如:

它们是合法且等价也可以使用如下形式:

但不能省略第二维的大小,如下面的定义是不合法的編译时会出错:

因为从实参传递来的是数组的起始地址,如果在形参中不说明列数编译器将无法定位元素的的位置。

各个维数不固定的C语言的二维数组组

如果C语言的二维数组组的各个维数不固定我们将不能使用以上定义方法,可以通過以下2种简单的方法实现

  1. 将C语言的二维数组组当一维数组操作

这样在被调用数组中对对元素a[i][j]的访问可以使用如下形式:

注意不能使用a[i][j]来矗接访问,因为编译器无法为其定位

* 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *方法2: 指向一个有5个元素一维数组的指针 * *方法3: 利用数组是顺序存储的特性, * * 通过降维来访问原数组! *

我要回帖

更多关于 C语言的二维数组 的文章

 

随机推荐