(4)--4、指针与二维数组程序设计基础.ppt
C语言的精髓语言的精髓指针指针指针与二维数组指针与二维数组2023/11/1822学习目标学习目标v理解指针与二维数组的关系v掌握用行指针操作二维数组2023/11/183指针与二维数组指针与二维数组v二维数组一个二维数组可以理解为是一个特殊的一维数组,而该一维数组的每个元素又是一个一维数组2023/11/184指针与指针与二二维数组维数组int a23=1,2,3,4,5,6;123456a二维数组有2个元素a0和a1只不过每个元素的类型又是一维数组a1&a0&a1a+1a0a00a01a02a0+0a0+1a0+2a10a11a12a1+0a1+1a1+2地址2023/11/185指向二维数组的指针指向二维数组的指针intint (*p)p)33;/行指针行指针,基类型是int3p=p=a a;/或者:或者:p p=&a0&a0;/指向第第0 0行行的“int3型”元素a00a01a02a10a1112345p0019FF3C0019FF400019FF440019FF480019FF4C0019FF3C指向二维数组的指针(行指针)6a120019FF502023/11/186 指向二维数组的指针指向二维数组的指针v一个指针变量还可以指向任意的一行v如:int a32=1,2,3,4,5,6;int(*ptr)2;ptr=a+1;/或者ptr=&a12023/11/187用用指针操作指针操作二二维数组维数组v指针操作二维数组方式一:for(int i=0;i2;i+)for(int j=0;j3;j+)printf(“%dn”,p i j );把指针当做数组名使用2023/11/188用用指针操作指针操作二二维数组维数组v指针操作二维数组方式二:for(int i=0;i2;i+)for(int j=0;j3;j+)printf(“%dn”,*(p i +j);Pi是一维数组首地址!2023/11/189用用指针操作二维数组指针操作二维数组v指针操作二维数组方式三:for(int i=0;i2;i+)for(int j=0;j3;j+)printf(“%dn”,*(*(p+i)+j);指针偏移 sizeof(int)*i个字节代码演示2023/11/1810用用指针操作二维数组指针操作二维数组v二维数组aMN行指针和一维数组aN 的一些等价写法和对比 类型数组首地址元素二维数组a&a0int(*p)N=aa i j*(*(a+i)+j)*(a i +j)一维数组a&a0int*p=aa i*(a+i)2023/11/1811 /输出数组元素 for(i=0;i3;i+)for(j=0;j4;j+)printf(%-8d,*(p i +j);printf(n);return 0;#include int main(int argc,char*argv)int data34;int i,j;int(*p)4=data;/声明一个行指针 /输入数组元素 for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,p i +j);用指针操作二维数用指针操作二维数组示例组示例【例】输入一个3行4列的二维数组,然后输出这个二维数组的元素值 声明二维数组的行指针行指针,i i行行j j列元素的地址列元素的地址,i行j列元素代码演示2023/11/1812谢谢大家!谢谢大家!谢谢大家!谢谢大家!