A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Freedam 中级黑马   /  2014-5-15 22:45  /  1607 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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已经是数组的首地址了,那再取地址不就是给地址再取地址了吗?疑惑中。

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

6 个回复

倒序浏览
哥们你好,两个没有区别,因为数组本来就是指针,&取数组的地址,是一样的
回复 使用道具 举报
不一样,ages取得是首地址里面的内容,&ages取的是地址
回复 使用道具 举报
指针变量使用&运算后得到的是指针变量的地址。
    而数组名相当于一个指针,指向的是首地址,并不是指向数组。
    所以C语言中的规定是取数组地址的结果是:仍然是其本身。
    既 &array 的值和 array一样。

评分

参与人数 1黑马币 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报 1 0
我人为在通常情况下&array跟arrary可以相同对待,因为都指向一个相同的内存地址
唯一不同的区别是指向这个地址的指针类型不一样
arrary代表的指针类型就是int型 而&array获得的指针类型是整个数组类型
可以通过测试arrary+1跟&array+1来测试他们的区别!
回复 使用道具 举报
无尽可能 来自手机 中级黑马 2014-5-17 22:36:32
地板
楼上说的有道理,o(≧v≦)o
回复 使用道具 举报
理解了,谢谢大家的详解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马