| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 773 人关注过本帖
标题:请教C语言中一个奇怪的数组赋值问题
只看楼主 加入收藏
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
结帖率:0
收藏
 问题点数:0 回复次数:19 
请教C语言中一个奇怪的数组赋值问题
无意间编写程序的时候写错了但是能编译通过并执行,有点不明白了;
代码如下:

#include "stdio.h"

main()
{
    int i=0;
    int Hello[]={"Hello","The","World!"};
    printf("在窗体上输出字符串数组的元素!\n\n");
    printf("字符串数组的元素是:\n");
    for(i=0;i<3;i++)
        printf("%s ",Hello[i]);
    printf("\n\n");
}

特别是是这句:int Hello[]={"Hello","The","World!"};为什么能执行!

搜索更多相关主题的帖子: 编写程序 include C语言 
2013-01-07 10:31
conan8732
Rank: 2
等 级:论坛游民
帖 子:24
专家分:43
注 册:2012-8-8
收藏
得分:0 
同求答案  不知道你是在什么编译器上编译通过的  刚试了下  VC不通过
只能int a[] = {'asdfs','sdfsfa','dfdsc'};
2013-01-07 10:42
conan8732
Rank: 2
等 级:论坛游民
帖 子:24
专家分:43
注 册:2012-8-8
收藏
得分:0 
错了 只能是int a[] = {'asds','ssfa','sdsc'};
字符不能超过4位  输出用%c  输出字符最后一位
2013-01-07 10:45
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
收藏
得分:0 
回复 3楼 conan8732
我是在VC++ 6.0的编译器里面通过的 原语句是char *Hello[] 结果错写成上面的了居然没报错 还出了一样的结果
2013-01-07 10:49
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
int Hello[]={"Hello","The","World!"};
是将每个字符串在内存中的首地址赋给Hello[]数组中的元素。
当以printf("%d ",Hello[i]);输出时,输出的就是每个字符串的首地址。
当以printf("%s ",Hello[i]);输出时,输出的当然也就是字符串了。

2013-01-07 11:00
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
楼主可以改成:printf("%d ",Hello[i]);
看输出的是不是三个长数字,那就是字符串在内存中的地址。
2013-01-07 11:02
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
收藏
得分:0 
回复 5楼 a4811
但是我定义的是 int 型的 Hello名的数组 不是 char型的 *Hello指针型数组啊 他怎么能把首地址赋给数组Hello[]中的元素呢?不是要指针型数组才行吗?
2013-01-07 11:05
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
""里的就是一个字符串的首地址,也是一个和int大小一样的整数,就和5楼说的一样。
在C里字面字符:'a','b'等都被解释为一个int。所以:'a'就是0x00000061,'abcd'就是0x61626364,'abcde'就是0x62636465,最后的4字符序列就代表了这个int的每个字节。

My life is brilliant
2013-01-07 11:09
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
https://bbs.bccn.net/viewthread.php?tid=395210&extra=&page=1
以前T版讲解过类似的问题
再加上这样的测试
图片附件: 游客没有浏览图片的权限,请 登录注册

我想能说明些问题,貌似应该是编译器把Hello[]当成字符指针数组了

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-07 11:13
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
收藏
得分:0 
回复 8楼 lz1091914999
哦明白了 和原来想的一样 只不过忘了在C里面的字符的储存形式是以十六进制的形式储存的,所以编译器应该是把指向字符元素的指针(即入口地址)当成数组的元素被赋予到int Hello[]里面,但是既然这样可以赋值为什么还要写成char *Hello[]呢??这又有什么区别呢?

[ 本帖最后由 kknd84913 于 2013-1-7 11:27 编辑 ]
2013-01-07 11:20
快速回复:请教C语言中一个奇怪的数组赋值问题
数据加载中...
 
   



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

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