指针操作一维数组和二维数组的理解!

指针操作一维数组和二维数组的理解!

一维数组

 你虽然觉得指针操作一维数组很简单,但是通过做题发现并没有那么简单,特别是二维数组!!!

int main()
{
	//创建一维数组
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(int);
	//一维数组在内存中是随着下标的增长,由低地址到
	//高地址连续开辟空间来创建!
	//那么凭借这一点只要由指针,在允许范围之内,可以随便操作内存
	//数组名arr是里面存的是首元素的地址;
	//创建的这个数组的每个元素是int
	//那么,通过第一个字节的地址可以随便访问

	//数组arr指向的就是第一个元素的类型
	int* p = arr;  //这儿arr被解析成了指针!!!
	printf("*(p + 0) = %d\n", *(p + 0));
	printf("p[0] = %d\n", p[0]);
	printf("*******************\n");
	printf("*(p + 1) = %d\n", *(p + 1));
	printf("p[1] = %d\n", p[1]);
	printf("*******************\n");
	return 0;
}

1

二维数组

int main()
{
	int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	//对于二维数组而言,arr即是数组名又是指向第一个元素的地址
	//为什么这样?
	//问一下,二维数组的大小怎么算?
	//是不是sizeof(数组名) - 计算数组的大小!
	//按道理讲,&arr,是整个数组的地址,本来就是这样的!!!
	//那么arr?
	//要怎么访问数据?
	//对于以前的简单类型
	int a = 10;
	//打印数据,因为它只有一个数据
	//所以,直接...
	printf("%d\n", a);
	//对于二维数据的设计是在访问数据中,把首元素的地址装进来arr,这样来访问,
	//你可能一点也不习惯!
	//二维数组的元素是一维数组
	int(*pArr)[3] = arr; //arr是一维数组的地址
	//就这样放问你了
	printf("%d\n", (*pArr)[0]);
	printf("%d\n", (*pArr)[1]);
	printf("%d\n", (*pArr)[2]);
	return 0;
}

 完结!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值