黑马程序员技术交流社区

标题: 关于数组的问题 [打印本页]

作者: Freedam    时间: 2014-5-15 22:45
标题: 关于数组的问题
本帖最后由 Freedam 于 2014-5-20 10:51 编辑

今天学习视频的时候发现数组名代表着数组的首地址,但是学程序时还可以对数组名取地址,而且编译不报错。
  1. int ages[10] = {1,2,3,4,5,6,7,8,9};
  2. printf("%p",ages);
  3. printf("%p",&ages);
复制代码

请问那&ages有什么意义,ages已经是数组的首地址了,那再取地址不就是给地址再取地址了吗?疑惑中。
作者: 奇迹    时间: 2014-5-15 22:54
哥们你好,两个没有区别,因为数组本来就是指针,&取数组的地址,是一样的
作者: 白羊爱芒果    时间: 2014-5-16 13:39
不一样,ages取得是首地址里面的内容,&ages取的是地址
作者: 星河鹭起    时间: 2014-5-16 19:21
指针变量使用&运算后得到的是指针变量的地址。
    而数组名相当于一个指针,指向的是首地址,并不是指向数组。
    所以C语言中的规定是取数组地址的结果是:仍然是其本身。
    既 &array 的值和 array一样。
作者: huangqiwa    时间: 2014-5-17 17:52
我人为在通常情况下&array跟arrary可以相同对待,因为都指向一个相同的内存地址
唯一不同的区别是指向这个地址的指针类型不一样
arrary代表的指针类型就是int型 而&array获得的指针类型是整个数组类型
可以通过测试arrary+1跟&array+1来测试他们的区别!
作者: 无尽可能    时间: 2014-5-17 22:36
楼上说的有道理,o(≧v≦)o
作者: Freedam    时间: 2014-5-20 10:51
理解了,谢谢大家的详解。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2