原来二维数组内部隐藏着这样不为人知的秘密......
来源:互联网 发布:手机淘宝5.7.2版本苹果 编辑:程序博客网 时间:2024/05/20 16:42
二维数组的自我介绍
大家好,我是一个二维数组,像你们人类一样,我有一个具体的名字,字”int”,名”[3][4]” . ,见名知其意,我其实就是一个三行四列的整型数组,可能我这么一介绍自己,你们脑子里我高大的形象可能就建立起来了,如下图.
但我其实就是一个”照骗”,在内存里,我就原形毕露了,
在内存中我和一维数组长得一样,都是一个个元素站好队,连续排列起来的.
这时候你可能就会疑问了,俺和一维数组有啥子区别呢,俺当然说我们~不一样!
这一切都要从我和一维数组的地址说起…
你们已经知道了,我名字叫 int[a][b]但我感觉还是不够酷炫,所以决定起个别号,叫”a”,
这里就有个完整定义了,
int a[3][4];
为了和一维数组区分,我们在拉过来一个小b
int b[3];
我和一维数组最大区别就是,当我们作为参数传参的时候传的是首地址,
but
一维数组的首地址是首个元素的地址
二维数组的首地址是首个数组的地址
但是我们有个相同点就是遇到取地址符号&的时候表示的是
整个元素的地址 -
你肯定会问,首个数组是啥玩意啊,别急 我再来给你一张我的自拍
说白了我这个三行四列的二维数组,就是三个长度为四的一维数组组成的,
二维数组a[3][4]作为参数的时候a就表示的是a[0]的地址,a[0]是个数组
a+1访问的是a[1] (第二个数组)
a[0]+1 访问的是a[0][1](第一个数组的第二个元素)
所以明白这个道理 接下来这段代码就有意思了
int a[3][4] = {0}; printf("&a的地址是 %p\n", &a); printf("&a+1的地址是 %p\n", &a+1); //跳过整个二维数组 printf("a +1的地址是 %p\n", a +1); //跳过第一行 一行16字长 printf("a + 2的地址是 %p\n", a + 2);// 跳过第1,2行 printf("&a[0] +1的地址是 %p\n", &a[0] +1);//跳过第一行 printf("&a[0] + 2的地址是 %p\n", &a[0] + 2); //跳过第1, 2行 printf("a[0] +1的地址是 %p\n", a[0] + 1);//跳过第一行中的第一个 printf("a[0] +2的地址是 %p\n", a[0] +2);//跳过第一行中的第一个
这里是运行结果
总结
- 数组参数 a表示首地址
- &a表示整个数组的地址
- 它们的地址都是一样的 但是+1后结果明显不一样
- 一维数组首地址是首元素的地址
- 二维数组首地址是首个数组的地址 -
阅读全文
0 0
- 原来二维数组内部隐藏着这样不为人知的秘密......
- QQ原来隐藏着这么多秘密
- 二维数组的小秘密
- 网页不为人知的秘密
- CSDN不为人知的秘密
- jquery不为人知的秘密
- Eclipse不为人知的秘密
- SendMessage不为人知的秘密
- 不为人知的秘密
- ViewPager不为人知的秘密
- ViewPager不为人知的秘密
- ViewPager不为人知的秘密
- ViewPager不为人知的秘密
- ViewPager不为人知的秘密
- QQ技术全攻略(原来简单的QQ,还隐藏着这么多秘密!)
- QQ技术全攻略(原来简单的QQ,还隐藏着这么多秘密!)
- QQ技术全攻略(原来简单的QQ,还隐藏着这么多秘密!)
- 厉害了配电柜内部原来是这样散热的
- permission denied (publickey)问题的解决 和 向github添加ssh key
- 顺序查找和折半查找
- 如何关闭MyEclipse自动更新
- 身份证信息获取--一个简单的php类
- 根据gethostbyname找样本发出的DNS数据包
- 原来二维数组内部隐藏着这样不为人知的秘密......
- logback的配置和使用
- [基础语法] SEARCH搜索指定字符串详解
- JQuery给textarea取值和赋值
- NYOJ 58 最少步数(DFS)
- 使用RTMPdump(libRTMP)直播来自v4l2的摄像头数据
- spring-mvc-mybatis pom文件
- 逻辑回归(logistic regression)与核逻辑回归(kernel logistic regression)
- 在Java路上,我看过的一些书、源码和框架(转)