C语⾔编程-指针遍历⼆维数组
笔记:
⼀:操作⽅法
①a[1][2]地址为:a[1]+2,*(a+1)+2 ((a+1)第⼆⾏地址,*(a+1)+2第⼆⾏第⼀列地址),&a[1][2]
②a[1][2]值为:*(a[1]+2),*(*(a+1)+2),a[1][2]
③*(⾏地址)→列地址;*(列地址)→某⾏某列的值
⼆:指针与⼆维数组概要
①⼆维数组有⾏地址(⾏指针)和列地址(列指针)。
②⼆维数组的名字为第⼀⾏地址,⼆维数组名字加上n为n+1⾏地址。
③⼆维数组的每⼀⾏地址和每⼀⾏第⼀列地址本⾝的值⼀样,但概念不同。
④通过⾏地址(⾏指针)和列地址(列指针)均可遍历⼆维数组
⑤指针运算符(*)加上⾏地址可获得列地址;(&)加上第⼀列地址可以获得当前⾏地址;指针运算符(*)加上列地址可获得列地址中的元素值。#include <stdio.h>
void out1(int a[][4],int size);
void out2(int *p,int size);
void out3(int (*p)[4],int row,int col);//⾏数不⽤标明,列数必须标明
int main(void)
{
int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
out1(a,12);//数组a⾸地址
printf("\n************************\n");
out2(*a,12);
printf("\n************************\n");
int (*p)[4];
p=a;
out3(a,3,4);
printf("************************\n");
out3(p,3,4);
printf("************************\n");
return0;
}
//列指针遍历1
void out1(int a[][4],int size)
指针与二维数组{
int *p; //p为指向某⾏某列元素的指针
/*p为数组第⼀⾏第⼀列元素的地址*/
for(p=a[0];p<a[0]+size;p++)
{
if((p-a[0])%4==0)//每遍历4个元素换⾏
printf("\n");
printf("%5d",*p);//*地址为该地址⾥的值
}
}
//列指针遍历2
void out2(int *p,int size)
{
int *s;//另定义⼀个指针s
for(s=p;s<p+size;s++)
{
if((s-p)%4==0)
printf("\n");
printf("%5d",*s);
}
}
//⾏指针遍历
/*p为数组指针(⾏指针) 指向的是⾏*/
/
*第⼀个形参为⼀维数组*/
void out3(int (*p)[4],int row,int col)
{
int i,j;
for(i=0;i<row;i++)
{
{
for(j=0;j<col;j++)
{
printf("%5d",*(*(p+i)+j));
/*
p是第1列地址,p+i就是第i⾏的地址  *(p+i)就是第i⾏第⼀列的地址
*(p+i)+j就是第i⾏第i列的地址
*(*(p+i)+j)就是第i⾏第j列地址⾥的内容  */
}
printf("\n");
}
}