| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:原来数组的首地址这个说法是不对的。
只看楼主 加入收藏
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
结帖率:85.71%
收藏
已结贴  问题点数:10 回复次数:9 
原来数组的首地址这个说法是不对的。
经常看到很多地方说“数组的首地址”就是数组名。如int a[3]={1,2,3};那么a就是数组的首地址。
可这个“首”字对吗?
今天做了一道题:
#include <stdio.h>
int main(void)
{
    int a[3]={1,2,3};  

    printf("%d\n",a+1);
    printf("%d\n",&a+1);
    return 0;
}
加深了我对这一概念的理解。
原来数组是没有地址的。只能够说一个数组的首元素的地址。上面的a不是首地址,是数组名,是指向首元素的指针。它和指向整个数组的指针的值是一样的。
所以a的值和&a的值是一样的。但是a+1和&a+1就不同了,类型不一样。这个1所代表的偏移不同,前一个是sizeof(int),后一个是sizeof(int)*3。

看起来一个小问题,但还是要搞清楚啊。
搜索更多相关主题的帖子: include return 元素 
2013-08-08 16:56
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:2 
我个人理解啊  不对请指正
a是数组名
a[0]=1   1的在内存中的位置  就是这个数组的首地址

这个怎么玩
2013-08-08 17:03
aa547880610
Rank: 2
等 级:论坛游民
帖 子:8
专家分:14
注 册:2013-7-29
收藏
得分:2 
a+1 的值是数组中第二个元素的地址,
&a+1 这列&a则是把a看成一个类型 该类型所占内存为3*sizeof(int),所以+1其实是+3*zizeof(int);
假如 int* p=a;
 printf("%08x\n",p);
 printf("%08x\n",&p);
这两个输出肯定不一样
 printf("%08x\n",p+1);这个跟a+1一个意思,
 printf("%08x\n"&p+1);这个跟&a+1一个意思,只是int*类型所占字节是4,所以+1是+sizeof(p)
我只想说4个字:分给我吧

2013-08-08 17:57
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:2 
首元素的地址就是整个数组的地址,这没有问题。系统就是这样分配内存的,不过从指针角度考虑还是有点意思的!努力!

潇洒不可少!
2013-08-08 18:59
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:2 
LZ,你要说明什么?

一切定义是为了实用,为了使用。咱不做那些咬文嚼字。
理论不如自己在电脑上试验更有效

至于叫什么名字,怎么叫,没毛关系,咱只要知道它的本质,知道怎么用,叫什么都可以

我们看程序的眼光越是接近计算机,就越准确。如果你把这些都能用内存解释,就不必纠结这些了

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-08 19:06
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:2 
我能说不要注意那些细节吗??????

讲究实用就好吧

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-08 19:13
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 5楼 liufashuai
个人感觉,有时候咬文嚼字一点对于概念的正确理解还是有一点作用的。
当然,不能什么问题都要咬文嚼字,那就像个老学究了。
我们在讨论一个数组的地址的时候,因为数组是一个整体,何来首和尾?所以说“首”地址,个人觉得有一点点牵强附会。
虽然大家平时都这么说,而且都知道它的正确含义。但如果在运用的时候,脑子中清楚的明白数组的地址和数组首元素的地址这两个概念的异同,岂不是更好?

2013-08-08 20:54
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:0 
&a 在C标准里 其实是一个未定义的行为,&a的值和a的值是一样的 这只是编译器的行为,LZ根据这个结果来进行推断数组无首地址这个说法,你能清楚数组的地址和数组首元素地址???那么请问数组的地址是什么??数组的元素这么多,你用哪一个作为数组地址??数组的地址,这根本就是一个说不通,也无法理解的概念。说个数组首地址,谁都能明白它指的是什么。
2013-08-08 21:46
lhx07
Rank: 1
来 自:济南
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-8-8
收藏
得分:0 
随便看看 ^_^

迷失在二进制的世界
2013-08-08 22:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
楼主的理解是对的。C本来就不存在所谓的“数组”,因为它没有检查边界机制,地址仅仅作为入口点使用。

授人以渔,不授人以鱼。
2013-08-09 10:51
快速回复:原来数组的首地址这个说法是不对的。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021286 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved