C语言指针学习总结(附代码)(二)

首先申明本文是个人学习总结,是凭借自己的理解总结的。其中一些理解可能有错误,欢迎指出。代码是自己跑通了的。

上一篇总结搞清楚了基本的指针和一维数组,这一篇写一下二维数组,二维数组和指针搞明白了多维的也就能明白了。先看下面这个图:
这幅图表达了数组a在内存中的存储形式。a是3*3的二维数组,那么&a是0000,sizeof(a)是3x3x4=36个字节。&a[1]是0012,sizeof(a[1])是3x4=12个字节。sizeof(a[1][1])是int型,所以是4个字节。这幅图表达了数组a在内存中的存储形式。a是3*3的二维数组,那么&a是0000,sizeof(a)是3x3x4=36个字节。&a[1]是0012,sizeof(a[1])是3x4=12个字节。sizeof(a[1][1])是int型,所以是4个字节。

#include<stdio.h>
#include<string.h>

int main(void)
{
	int a[3][3] = {1,2,3,4,5,6,7,8,9};
	int *p = (int*)(&a[1] + 1);
	int *q = (int*)(int*)(&a[1][0] + 1);

	printf("a的地址是:%d\n",a);
	printf("sizeof(a):%d\n", sizeof(a));

	printf("a[1]的地址是:%d\n", &a[1]);
	printf("sizeof(a[1])是:%d\n", sizeof(a[1]));
	printf("*p是:%d\n", *p);

	printf("a[1][0]的地址是:%d\n", &a[1][0]);
	printf("sizeof(a[1][0])是:%d\n", sizeof(a[1][0]));
	printf("*q是:%d\n", *q);

}

结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值