| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4091 人关注过本帖, 1 人收藏
标题:字符数组的起始地址让我很困惑……
只看楼主 加入收藏
YuriGagarin
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2008-2-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:24 
字符数组的起始地址让我很困惑……
数组名为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
大丈夫死了
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-7-15
收藏
得分:0 
177722是相对程序基地址,每个程序的基地址都一样,一般是0,char* c[]在mian()函数里,所以只要没在char* c前定义其它变量,它的地址就不变。
2008-07-17 12:32
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*不知道你是不是这个意思?*/
#include <stdio.h>
int main(void)
{
        char c[6];
        int i;
        scanf("%s",c);
        for(i=0;i<6;i++)
                printf("%o\n",c[i]);
        getch();
}
2008-07-17 13:24
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
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
数组定义好了,地址也就定下来,输入的只不过是地址的内容,初始地址就不会变了吧。
2008-07-18 13:59
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
大丈夫死了
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-7-15
收藏
得分:0 
有逻辑地址 线性地址 物理地址  你程序里输出的是逻辑地址   对于你的程序来说 它的逻辑空间在80x86里是40G  你的程序里的逻辑地址都是从0开始,因为main()是入口函数 所以它里面的变量的地址一般都固定了。不知道怎么初始化啊
2008-07-21 12:19
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]大丈夫死了[/un] 在 2008-7-21 12:19 的发言:[/bo]

有逻辑地址 线性地址 物理地址  你程序里输出的是逻辑地址   对于你的程序来说 它的逻辑空间在80x86里是40G  你的程序里的逻辑地址都是从0开始,因为main()是入口函数 所以它里面的变量的地址一般都固定了。不知道 ...


你何必讲这么复杂?LZ不一定能明白保护模式下的地址概念。LZ输出的那个数字,就是特定的数组的一个“门牌号”,根据这个数字,就可以找到这个数组到底在哪儿。比如我给你一个号码“3#”,你就可以知道我想让你看这个帖子三楼的那位仁兄的发言。这个数字是一样的道理。注意的是,这个“地址”在一个特定的过程中是不变的。但是他有可能改变,比如在那个数组“搬家”了的时候。打个比方,如果2#自己把他的帖子删了,那么3#就变成了2#,我再要让你去看原3#的内容,就会给你一个新的地址“2#”了。明白否?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-21 12:32
快速回复:字符数组的起始地址让我很困惑……
数据加载中...
 
   



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

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