指針和二維數組的關係
一、用數組名訪問二維數組
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義數組
int a[3][4] = {{1,3,5,7}, {9,11,13,15} ,{17,19,21,23}};
//打印二維數組的列指針
printf("&a[0][0] = %p\n",&a[0][0]);
printf(" a[0] = %p\n",a[0]);
printf("&a[0][1] = %p\n",&a[0][1]);
printf(" a[0]+ 1 = %p\n",a[0]+1);
printf("&a[0][2] = %p\n",&a[0][2]);
printf(" a[0]+ 2 = %p\n",a[0]+2);
printf("&a[0][3] = %p\n",&a[0][3]);
printf(" a[0]+ 3 = %p\n",a[0]+3);
//打印行指針 a[0] a[1] a[2]
//a+1 是第二行的首地址
//a+2 是第三行的首地址
printf("a[0] = %p\n",a[0]);
printf(" a = %p\n",a);
printf("a[1] = %p\n",a[1]);
printf("a +1 = %p\n",a+1);
printf("a[2] = %p\n",a[2]);
printf("a +2 = %p\n",a+2);
system("pause");
return 0;
}
a[i]+j獲取的是a [i] [j]的地址,
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義數組
int a[3][4] = {{1,3,5,7}, {9,11,13,15} ,{17,19,21,23}};
int i,j;
//控制行
for(i = 0; i < 3; i++)
{
//控制列
for(j = 0; j < 4; j++)
{
//打印出數組元素
printf("%d\t",a[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義數組
int a[3][4] = {{1,3,5,7}, {9,11,13,15} ,{17,19,21,23}};
int i,j;
//定義一個爲數組指針並指向數組a[3][4]
int (*p)[4] = a;
//控制行
for(i = 0; i < 3; i++)
{
//控制列
for(j = 0; j < 4; j++)
{
//打印出數組元素
printf("%d\t", *(*(a+i)+j));
}
printf("\n");
}
system("pause");
return 0;
}
二、用普通指針訪問二維數組
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義數組
int a[3][4] = {{1,3,5,7}, {9,11,13,15} ,{17,19,21,23}};
int i,j;
int *p = a;
for(i = 0; i < 12; i++)
{
//打印出數組元素
printf("%d\t",*(p+i));
}
printf("\n");
system("pause");
return 0;
}
三、二維數組指針
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義數組
int a[3][4] = {{1,3,5,7}, {9,11,13,15} ,{17,19,21,23}};
int i,j;
//定義一個爲數組指針並指向數組a[3][4]
int (*p)[4] = a;
//控制行
for(i = 0; i < 3; i++)
{
//控制列
for(j = 0; j < 4; j++)
{
//打印出數組元素
printf("%d\t", *(*(p+i)+j));
}
printf("\n");
}
system("pause");
return 0;
}