#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void main()
{
int a[3][5];
int i = 0;
int j = 0;
int tmp = 1;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
a[i][j] = tmp++;
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d ", a[i][j]);
}
}
//多维数组名称代表什么意思
printf("a %d a+1 %d\n", a, a + 1); //a+1的步长 是20个字节 5*4 a和一个指向数组的指针很类似
printf("&a %d &a+1 %d\n", &a, &a + 1); //&a+1的步长是 60个字节 15*4
{
//定义一个指向数组的指针变量
int(*pArray)[5];//告诉编译器 分配4个字节的内存 32bit平台下
pArray = a;
printf("pArray指针所占内存空间大小 %d\n", sizeof(pArray));
printf("\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d ", pArray[i][j]);
}
}
}
//多维数组名的本质就是一个数组指针,步长是一维数组的长度。
// (a+i)代表整个第i行的首地址 二级指针 a代表第0行的整个行地址
// *(a+i)代表 一级指针 第i行首元素的地址
// 只不过第一行的地址和第一行的首元素的地址是重叠的。
// *(a+i)+j==>& a[i][j]
// *(*(a+i)+j)==> 代表第i行第j列的值 a[i][j]
printf("Hello...\n");
system("pause");
return ;
}
int a[3][5]的表示形式:
第0行第1列元素地址 a[0]+1 *a+1 &a[0][1]
第1行第2列元素地址 a[1]+2 *(a+1)+2 &a[1][2]
第i行第j列元素地址 a[i]+j *(a+i)+j &a[i][j]
第1行第2列元素的值 *(a[1]+2) *(*(a+1)+2) a[1][2]
第i行第j列元素的值 *(a[i]+j) *(*(a+i)+j) a[i][j]