C 二维数值指针访问

目录

基本说明

二维数组指针去访问地址


对于32位运行平台,指针地址占用4字节。就是说存放一个指针的地址需要用4字节存储。

64位,指针地址占用8字节。

 注意:优先级问题,数组下标[]运算法 高于  指针*运算符


以下测试针对32位处理器


基本说明

  • 数组指针:变量是指针,一维 char (*p)[3] 、二维 char (*p)[2][3] ,长度固定是4字节
  • 指针数组:变量是数组,每个位置存放的是指针地址 一维 char *p[3] 、二维 char *p[2][3]  

说白了就是存放指针的数组,还是数组

    char *p;
	printf("char *p => %d\r\n", sizeof(p));
	{
		char *p0[3];
		char *p1[2][3];
		printf("指针数组:\r\n");
		printf("char *p0[3] => %d\r\n", sizeof(p0));
		printf("char *p1[2][3] => %d\r\n", sizeof(p1));
	}
	{
		char(*p0)[3];
		char(*p1)[2][3];
		printf("数组指针:\r\n");
		printf("char (*p0)[3] => %d\r\n", sizeof(p0));
		printf("char (*p1)[2][3] => %d\r\n", sizeof(p1));
	}

输出结果: 

char *p => 4
指针数组:
char *p0[3] => 12
char *p1[2][3] => 24
数组指针:
char (*p0)[3] => 4
char (*p1)[2][3] => 4

二维数组指针去访问地址

		int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
		int(*p)[2][3] = arr;//或者 int(*p)[2][3] = &arr;
		printf("%d\r\n", (*p)[0][2]);//指针访问
		printf("%d\r\n", p[0][0][2]);//数组下标访问

此时p是一个指针,它只需要开辟4字节的空间用来存放地址。访问地址的方式有指针操作符号*,也可以通过数组下表访问。

p[0][0][2]貌似是3维度数组,其实可理解为三维数组的索引维0的数组,

		int arr[] = {
			1, 2, 3,
			4, 5, 6,
			7, 8, 9,
			10, 11, 12 };

		int(*p)[2][3] = (int(*)[2][3])arr;

		printf("%d\r\n", (*p)[0][2]);  // => 3
		printf("%d\r\n", p[0][0][2]);  // => 3
		printf("%d\r\n", p[1][0][0]);  // => 7

		int(*px)[3] = (int(*)[3])arr;

		printf("%d %d\r\n", (*px)[0],px[0][0] ); // => 1 1
		printf("%d %d\r\n", (*(px+1))[2],px[1][2]);// => 6 6

 p[1][0][0] 结果是7,调到了下一个二维数组的开始位置。

总结,

        数组指针只是定义了程序的下标索引格式、偏移量等等。就是告诉程序要怎么去读取一个地址段空间里的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值