<span style="font-size:24px;">#include<stdio.h>
#include <stdlib.h>
// 二维数组的指针
// 一维数组的单个元素是单个变量 而二维数组的元素则是一行元素
// *a代表列地址 也就是单个元素的地址 a 代表行地址 &a代表二位数组的地址
// sizeof(**a) 取列地址中的内容所占内存的大小 也就是一个元素所占内存的大小
// sizeof(*a) 取行地址中的内容所占内存的大小 也就是一行元素所占内存的大小
// sizeof(*&a) 取整个数组地址中的内容所占内存的大小 也就是二维数组所占内存的大小
// a[i]代表第i-1行的第一个元素的地址 a[0]+1=*a+1 代表第二行第二个元素的地址 &a[1][1]
//*(a[1]+0)=*(*(a+1)+0)=a[1][0]的值
void main()
{
int a[3][4] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } };
//下面是各个指针中的地址 他们的地址一样 但所对应的数据大小却不同
printf("&a=%p,a=%p,**a=%p,a[0]=%p\n", &a, a, *a, a[0]);
//下面打印出各个指针中的地址所对应数据的大小
printf("&a=%8d,a=%8d,**a=%8d,a[0]=%8d\n\n", sizeof(*(&a)),sizeof(*a),sizeof(**a), sizeof(*a[0]));
//下面打印出a[2][1]变量的值
printf("*(*(a+2)+1)=%d,*(a[2]+1)=%d,*(*a+9)=%d,a[2][1]=%d\n\n", *(*(a + 2) + 1), *(a[2] + 1),
*(*a + 9),a[2][1]);
//对于二维数组,普通的指针不能匹配,需要创建特殊的指针
//这是因为 : int a; int * p=&a; 定义一个指针 int *表明这是一个int型的指针,
//从这里开始读取sizeof(int)大小内存 然后以int的方式显示出数据
// 如果 int a[3][4]; int *p=a; 会出现类型不匹配 所以要用下面的方式
int (*p)[4] = a;
printf("p[2][1] = %d\n\n",p[2][1]);
getchar();
}</span>
二维数组的指针
最新推荐文章于 2021-04-08 09:47:40 发布