二维数组的指针

<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值