1,二维数组
#include <stdio.h>
int main(){
int a[3][2]={{1,2},{2,3},{3,4}};
int b[6]={0}; //数组a和数组b在内存中是等价的
int *p=a;
int i;
for(i=0;i<6;i++){
printf("%d\t",p[i]); //因为二维数组也是顺序存储的,故可以用一维指针访问
}
}
#include <stdio.h> //行指针
int main(){
int a[3][2]={{1,2},{6,3},{5,4}};
int (*p2)[2]=a; //*p为指向整型的指针,p为指向指针的指针,每次加1会一行一行走,为[行指针]
int c[2]; //c为指向整型的指针
int *p1[2]; //即*(p1[2]),为指针数组
printf("%lu\t",sizeof(p1)); //16,为两个指针大小
printf("%lu\t",sizeof(p2)); //8,指针为8字节
printf("%d\t",p2[2][1]); //为4,第三行第二列的元素
printf("%d\t",*p2[2]); //5,第三行的首元素的值
printf("%d\t",*p2[1]); //6
printf("%d\t",*p2[0]); //1
}
#include <stdio.h> //列指针
int main(){
int a[3][2]={{1,2},{6,3},{5,4}};
int *p1=a; //列指针
printf("%d\t",p1[2*1+1]); //用p1[i*ROW+j]计算a[i][j]
}
//输出3