首页 > 代码库 > 多维数组与指针{笔记}

多维数组与指针{笔记}

a:表示二维数组名,指向一维数组a[0],即0行首地址;

a[0],*(a+0),*a:表示0行0列元素地址;

a+1,&(a+1):1行首地址

a[1]+2,*(a+1)+2,&a[1][2]:1行2列元素a[1][2]的地址

*(a[1]+2,*(*(a+1)+2),a[1][2]:1行2列元素a[1][2]的值

二维数组名是指向行的;

例如:a和a+1是指向行的指针,在前面加*就是*a和*(a+1),就成为指向列的指针,分别指向a数组0行0列的元素和1行0列的元素;反之,在指向列的指针前面加上&,就成为指向行的指针;

&a[i]或a+i指向行,a[i]或*(a+i)指向列,当列下标为0时,&a[i]和a[i](即a[i]+j)值相等,即相同地址值,但是指向的对象是不同的,指针的类型不同;

在二维数组中,a+i、a[i]、*(a+i)、&a[i]、&a[i][0]的值相等,都是同一地址值;

例子:

#include <studio.h>
#define FORMAT "%d,%d\n"
void int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
printf(FORMAT,a,*a);
printf(FORMAT,&a[0],&a[0][0]);
printf(FORMAT,a[1],a+1);
printf(FORMAT,&a[1][0],*(a+1)+0);
printf(FORMAT,a[2],*(a+2));
printf(FORMAT,&a[2],a+2);
printf(FORMAT,a[1][0],*(*(a+1)+0));
return 0;
}

 

多维数组与指针{笔记}