二维数组数组名
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// a代表第0行首地址
// a+i代表第i行首地址 等价于 a[i]
// *(a+i) 代表第i行首元素地址
// *(a+i)+j 第i行第j列的地址 等价于 &a[i][j]
// *(*(a+i)+j) 第i行第j列的地址的值 等价于 a[i][j]
int a[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int a2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a3[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int i=0;
for (; i < 3; i++)
{
for (int j=0;j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
// 二维数组名代表第0行的首地址(区别于第0行首元素地址,虽然值一样,但是步长不一样)
printf("a = %d a+1 = %d\n", a, a+1); //a = 6421984 a+1 = 6422000 +16
printf("%d %d\n", *(a+0), *(a+1)); // 6421984 6422000 +16 *(a+0)是第0行首元素的地址
printf("%d %d\n", *(a+0), *(a+0)+1); // 6421984 6421988 +4
printf("%d %d\n", a[0], a[0]+1); // 6421984 6421988 +4
}
网友评论