二维数组的指针

来源:互联网 发布:php curl 异常处理 编辑:程序博客网 时间:2024/05/17 08:57
<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>

0 0