C语言中的三值合一
2016-07-17 16:58
302 查看
在学习C语言中我们会发现这样一种情况:
#include<stdio.h>
Int main()
{
Int ar[10];
printf(“%p\n”,ar);
printf(“%p\n”,&ar);
Printf(“%p\n”,&ar[0]);
}
运行上面这一段代码之后发现:三个运行结果都是一样的。对于以上的现象我把它称为C语言的三值合一。
虽然运行结果是一样的,但是其本质是不同的:
ar访问的是数组名的值,而这个值恰好是首元素的地址
&ar[0]对数组的首元素求地址
&ar是求整个数组空间的的地址(恰好是首元素的地址)
数组名ar代表的是整个数组,它的值恰好是首元素的地址,当用sizeof(ar)求其大小时,可以得出sizeof(ar)=40.
&ar[0]则指明求数组中首元素的地址。
&ar则是对整个数组空间求地址,它的地址恰好就是首元素的地址。
我们经常听到说&ar,ar就是首元素的地址,这种说法是不正确的,它只能说明他们的值与首元素一样,但并不首元素的地址。相信经过以上的讲解,我们能够清楚地分辨他们。
#include<stdio.h>
Int main()
{
Int ar[10];
printf(“%p\n”,ar);
printf(“%p\n”,&ar);
Printf(“%p\n”,&ar[0]);
}
运行上面这一段代码之后发现:三个运行结果都是一样的。对于以上的现象我把它称为C语言的三值合一。
虽然运行结果是一样的,但是其本质是不同的:
ar访问的是数组名的值,而这个值恰好是首元素的地址
&ar[0]对数组的首元素求地址
&ar是求整个数组空间的的地址(恰好是首元素的地址)
数组名ar代表的是整个数组,它的值恰好是首元素的地址,当用sizeof(ar)求其大小时,可以得出sizeof(ar)=40.
&ar[0]则指明求数组中首元素的地址。
&ar则是对整个数组空间求地址,它的地址恰好就是首元素的地址。
我们经常听到说&ar,ar就是首元素的地址,这种说法是不正确的,它只能说明他们的值与首元素一样,但并不首元素的地址。相信经过以上的讲解,我们能够清楚地分辨他们。
相关文章推荐
- 用C语言实现二分查找
- C++多重继承二义性解决
- POJ 2337 Catenyms
- C++链表的建立,排序,删除
- C++Primer 异常处理
- 熟练掌握(区分)i++和++i
- 【模板大法好】预处理组合数模板
- Leetcode 28. Implement strStr() (Easy) (cpp)
- error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针
- C++中的map和multimap容器
- Integer to Roman
- CodeForces #1 C. Ancient Berland Circus(两种解法...
- USACO - Nov09 Job Hunt 找工作 SPFA算法+点权转边权
- [置顶] 各种乱七八糟的模板 【不定期补充】[C++语言描述]
- 天热无聊,用C语言函数指针实现的小函数^_^
- C++ read函数读入int整形数据
- strcpy和strncpy用法和区别
- C语言字符串操作总结大全
- C语言 程序 打印日历
- C++中虚函数表存储位置浅析