C语言2多维数组与指针
- 格式:ppt
- 大小:453.50 KB
- 文档页数:15


转:⾏指针和列指针指针与多维数组(主要指⼆维数组)int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};换个⾓度看世界:如⾸⾏⼀样,将⾸⾏视为⼀个元素,⼀个特殊的元素,这个“特殊的”元素是⼀个⼀维数组。
那么这个⼆维数组是由是由三个“特殊的”元素组成的⼀个“特殊的”⼀维数组。
a是这个“特殊的”⼀维数组的名称,也就是⾸地址,也就是第⼀个元素的地址,也就是第⼀⾏的⾸地址,是指⾸⾏⼀整⾏,并不是指某个具体元素。
那么我们称之为“⾏指针”。
同理:a+0,a+1,a+2,都是⾏指针。
结论:表⽰形式含义指针类型a或者a+0指向第0⾏⾏指针a+1指向第1⾏⾏指针a+2指向第2⾏⾏指针接下来,我们来放⼤观看⾸⾏,⾸⾏的元素分别是:a[0][0],a[0][1],a[0][2],a[0][3]。
将其看作⼀个独⽴的⼀维数组,那么 a[0]就是这个数组的名称,也就是这个数组的⾸地址,也就是第⼀个元素的地址,也就是a[0]+0。
a[0]和a[0]+0都是指具体的元素,那么我们称之为“列指针”。
结论:(第0⾏视为⼀维数组)表⽰形式含义指针类型a[0]是⼀维数组的名称,也是它的⾸地址,⽽且是第1列指针个元素的地址(a[0]+0)a[0]+1第0⾏,第2个元素的地址列指针a[0]+2第0⾏,第3个元素的地址列指针两个重要概念:⾏指针和列指针。
⾏指针:指的是⼀整⾏,不指向具体元素。
列指针:指的是⼀⾏中某个具体元素。
可以将列指针理解为⾏指针的具体元素,⾏指针理解为列指针的地址。
那么两个概念之间的具体转换是:*⾏指针----列指针&列指针----⾏指针根据以上转换公式:列指针等价表⽰内容内容等价表⽰含义⾏指针转换成:列指针a或a+0*a a[0]*a[0]*(*a)a[0][0]a+1*(a+1)a[1]*a[1]*(*(a+1))a[1][0]a+2*(a+2)a[2]*a[2]*(*(a+2))a[2][0]对于元素a[1][2],其地址⽤列指针表⽰为a[1]+2,等价表⽰为*(a+1)+2,那么内容是*(*(a+1)+2);列指针⾏指针等价表⽰含义a[0]&a[0]&a或&(a+0)第0⾏a[1]&a[1]&(a+1)第1⾏a[2]&a[2]&(a+2)第2⾏⽰例1:⽤列指针输出⼆维数组。
c语言数组的类型
C语言数组是一种数据类型,它是由相同数据类型的元素组成的有序集合。
数组的元素可以是数字、字符或其他数据类型。
C语言数组的类型可以分为两种:一维数组和多维数组。
一维数组是由一个维度组成的数组,例如 int a[10],它表示由10个整数元素组成的数组。
多维数组是由两个或多个维度组成的数组,例如int b[3][4],它表示由3行4列的整数元素组成的数组。
C语言数组的类型还可以根据数组的存储方式来分类。
在C语言中,数组可以按照行主序或列主序存储。
行主序(Row-Major Order)表示数组的元素是按照行的顺序存储的,而列主序(Column-Major Order)表示数组的元素是按照列的顺序存储的。
除了常规的数组类型外,C语言还支持指向数组的指针类型。
指向数组的指针类型可以用于对数组进行操作和遍历。
总之,C语言的数组类型是非常重要的,它们可以用于存储和处理大量的数据,是C语言编程中不可或缺的数据结构。
- 1 -。
121 printf("通过指针输出数组的元素:\n");for(p=s; p<(s+10); p++) printf("%4d", *p);return 0; }以上两个程序输入数组元素为1~10,输出结果均为:7.3.3 指向多维数组的指针和指针变量指针可以指向一维数组,也可以指向多维数组。
对于多维数组来讲,多维数组的指针是指多维数组的地址,即首地址。
而多维数组的指针变量是指存放多维数组地址的变量。
多维数组与一维数组类似,既可以用下标表示,也可以用指针表示,还可以用下标与指针组合来表示。
为了清楚理解多维数组的各种表示方法,并在程序设计中灵活应用,下面以二维数组为例进行分析,分析的结果也可以推广到一般的多维数组。
例如一个二维数组int a[2][3]。
数组a 是一个2行3列的二维数组,可以想像成一个矩阵。
各个数组元素按行存储,即先存储a[0]行各个元素(a[0][0],a[0][1],a[0][2]),再存储a[1]行各个元素(a[1][0],a[1][1],a[1][2])。
C 语言中,数组的元素允许是系统或自己定义的任何类型,如果将每一行数组元素当作一个整体,那么一个二维数组就可以看成是由一维数组作为数组元素的数组。
在a[2][3]中,这个一维数组中数组元素可以表示为a[0],a[1],但a[0],a[1] 本身不是数值,是一维数组,数组名是a[0],a[1]。
由一维数组与指针的概念可知,a 是元素为行数组的一维数组的数组名,那么对数组a 中元素的存取就可以按一维数组进行处理。
就是说a 是元素为行数组的一维数组的首地址,a+i 就是元素为行数组的一维数组的第i 个元素的地址,即:*(a+i) = a[i]。
例如:int a[2][3]={{1,2,3}{4,5,6}};它在内存中的存储与数组的关系表示如图7-10所示。
图7-10 数组元素与数组地址的关系表示所以,a[i]是第i 个行数组的数组名,a[i]+j 就是第i 个行数组中第j 个元素的地址。