| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4089 人关注过本帖, 1 人收藏
标题:字符数组的起始地址让我很困惑……
取消只看楼主 加入收藏
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
字符数组的起始地址让我很困惑……
数组名为c,占6个字节。数组名c代表地址2000。可以用下面的输出语句得到数组的起始地址。
  printf("%o",c);  /*用八进制形式输出数组c的起始地址*/
输出数组c的起始地址2000。可知数组名c代表数组起始地址。(此问题来源于谭浩强《C程序设计》(第三版)P145)
****************************
     c数组
2000 → C
2001 → h
2002 → i
2003 → n
2004 → a
2005 → \n
****************************

  根据这段内容,自己写了这么一个程序:
#include <stdio.h>
void main()
{
 char c[6];
 scanf("%s",c);
 printf("%o\n",c);
}
  其结果是:无论输入什么字符,得到的结果都是“177722”

  自己实在是不明白:这里面的起始地址到底是指是什么?难道说,每个初始的数组地址都是177722吗?
  如果是这样,起始地址2000就是给数组地址初始化的意思?
  %o——用八进制形式输出,就能得到需要的地址??

  自己对“地址”这部分太模糊了!!

[[it] 本帖最后由 YuriGagarin 于 2008-7-28 11:29 编辑 [/it]]
搜索更多相关主题的帖子: 八进制 地址 字符 困惑 printf 
2008-07-17 10:35
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]广陵绝唱[/un] 在 2008-7-17 13:24 的发言:[/bo]


/*不知道你是不是这个意思?*/
#include
int main(void)
{
        char c[6];
        int i;
        scanf("%s",c);
        for(i=0;i


  我想:应该是给C数组初始化起始地址为2000?

  楼上的程序,应该是将字符按八进制输出吧?
2008-07-18 13:53
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]大丈夫死了[/un] 在 2008-7-17 12:32 的发言:[/bo]

177722是相对程序基地址,每个程序的基地址都一样,一般是0,char* c[]在mian()函数里,所以只要没在char* c前定义其它变量,它的地址就不变。


相对程序基地址”?
  是这么会事啊?!
  这个应该算是那一个范畴呢?编译原理吗??
2008-07-18 13:55
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]大丈夫死了[/un] 在 2008-7-17 12:32 的发言:[/bo]

177722是相对程序基地址,每个程序的基地址都一样,一般是0,char* c[]在mian()函数里,所以只要没在char* c前定义其它变量,它的地址就不变。


数组的起始地址可以重新初始化吗?
2008-07-20 18:03
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
[bo][un]YuriGagarin[/un] 在 2008-7-17 10:35 的发言:[/bo]

数组名为c,占6个字节。数组名c代表地址2000。可以用下面的输出语句得到数组的起始地址
  printf("%o",c);  /*用八进制形式输出数组c的起始地址*/
输出数组c的起始地址2000。可知数组名c代表数组起始地址。
 ...


数组名c可以重新定义起始地址吗?
数组的起始地址可以用“printf("%o",c);”来输出吗??
2008-07-21 09:51
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
是啊!
逻辑地址、线性地址、物理地址是我在中专时学《计算机原理》知道的,还真不懂啊!!
  但是,10楼的解释更让我有些摸不着头脑!

  你的意思是指“177722”这个地址的更改吗?
  这种更改,可以改成“2000”吗??
2008-07-22 10:55
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
数组名为c,占6个字节。数组名c代表地址2000。可以用下面的输出语句得到数组的起始地址
  printf("%o",c);  /*用八进制形式输出数组c的起始地址*/
输出数组c的起始地址2000。可知数组名c代表数组起始地址。

数组c的起始地址,与“输出语句得到数组的起始地址”得到的地址是一会事吗??

  如果是,为什么结果又不一样的??
2008-07-23 21:33
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
收藏
得分:0 
死脑筋?看来,我真得不适合编程啊?!!
我所疑惑的“2000”和“17722”都是逻辑地址,指的是一会儿事。只不过,前者是假设,后者是真实输出的!
  而这个“2000”,也是可以重新定义的(可能不叫“重新定义”,反正就是差不多的意思),只不过不是我这样的定义——
#include <stdio.h>
void main()
{
char c[6];
scanf("%s",c);
printf("%o\n",c);
}

  我这样写,输出是对的。但却没有“重新定义”数组c的地址

  我这样理解和认识,对吗??

[[it] 本帖最后由 YuriGagarin 于 2008-7-25 12:08 编辑 [/it]]
2008-07-24 17:29
快速回复:字符数组的起始地址让我很困惑……
数据加载中...
 
   



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

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