| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 937 人关注过本帖, 1 人收藏
标题:int 类型 执行了 char 类型 这为什么!谢谢那位解答。(难道这题真的没人会 ...
只看楼主 加入收藏
kan月
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-9-28
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:11 
int 类型 执行了 char 类型 这为什么!谢谢那位解答。(难道这题真的没人会- -!)
程序代码:
    /*char* ArrayName[5];*/        /*字符指针数组*/
    int ArrayName[5];   /*可以替换上一行代码*/
    int index;                /*循环控制变量*/
    ArrayName[0]="WangJiasheng";    /*为数组元素赋值*/
    ArrayName[1]="LiuWen";
    ArrayName[2]="SuYuqun";
    ArrayName[3]="LeiYu";
    ArrayName[4]="ZhangMeng";
    for(index=0;index<5;index++)    /*使用循环显示名称*/
    {
        printf("%s\n",ArrayName[index]);
    }
   
    return 0;
有两个问:
1、为什么int 整形 可以成立?程序中赋的可都是字符。
2、char * ArrayName 可成立, char ArrayName 却不能成立为什么?

[ 本帖最后由 kan月 于 2011-11-9 18:58 编辑 ]
搜索更多相关主题的帖子: 谢谢 
2011-11-09 10:11
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
int ArrayName[5]; 不可以替换上一行,
char * ArrayName 是一个指针,可以指向一个字符,或串的首地址,
char ArrayName 定义的只是一个字符变量,只可以存一个字符。
2011-11-09 10:27
kan月
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-9-28
收藏
得分:0 
以下是引用heroinearth在2011-11-9 10:27:55的发言:

 int ArrayName[5]; 不可以替换上一行,
char * ArrayName 是一个指针,可以指向一个字符,或串的首地址,
char ArrayName 定义的只是一个字符变量,只可以存一个字符。
可以额!你试一下。问题“char ArrayName ”其实是“char ArrayName[5]”写漏了。

 数组其实也是指针对吧?
 程序中得的 *ArrayName 等于 &ArrayName[0] 等于 ArrayName[0] 等于 *(ArrayName+0) 没错吧!
 
上面的程序 int ArrayName[5]   可以执行
           char ArrayName[5]  不可以执行为什么?
   
注: char * ArrayName[5] 也可以执行!为什么?
      
2011-11-09 14:17
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 kan月
用int能编译过吗?

[ 本帖最后由 embed_xuel 于 2011-11-9 15:01 编辑 ]

总有那身价贱的人给作业贴回复完整的代码
2011-11-09 14:46
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:0 
以下是引用kan月在2011-11-9 14:17:30的发言:

可以额!你试一下。问题“char ArrayName ”其实是“char ArrayName[5]”写漏了。

 数组其实也是指针对吧?
 程序中得的 *ArrayName 等于 &ArrayName[0] 等于 ArrayName[0] 等于 *(ArrayName+0) 没错吧!
 
上面的程序 int ArrayName[5]   可以执行
           char ArrayName[5]  不可以执行为什么?
   
注: char * ArrayName[5] 也可以执行!为什么?
      
ArrayName如是已定义的指针,则 *ArrayName 表示 ArrayName 所指向单元的内容,&ArrayName[0]表示的是ArrayName[0] 的地址,ArrayName[0]表示的是一个数组成员,能等同吗?
2011-11-09 15:09
kan月
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-9-28
收藏
得分:0 
回复 5楼 heroinearth
程序代码:
void main()
{
    int *p;
    int i[1]={2};
   
    p=i[0];
   
    printf("%d",p);
}
你自个试试!
2011-11-09 18:52
kan月
Rank: 1
等 级:新手上路
帖 子:13
专家分:3
注 册:2011-9-28
收藏
得分:0 
回复 4楼 embed_xuel
你自己试试就知道了!
2011-11-09 18:58
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 7楼 kan月
对你无语了

总有那身价贱的人给作业贴回复完整的代码
2011-11-09 19:25
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
1、为什么int 整形 可以成立?程序中赋的可都是字符。
2、char * ArrayName 可成立, char ArrayName[5] 却不能成立为什么?

到现在我只想到一点,那就就数组和指针的关系。一个数组元素地址也是一个指针。
在这个处理过程中,你开始定义的是int型的数组,然后在赋值的过程中,给了一个字符串,然后,就把数组元素当成了一个指针,接收了一个字符串的首地址,而最后又是以字符串的方式输出,从而使得你的这个程序能够输出字符串。

而只有char *ArrayName[5]是一个指针数组,是可以的
而char * ArrayName 是不可成立的。

最后char ArrayName[5] 却不能成立,这点我还没想到
2011-11-09 20:33
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 7楼 kan月
在单位的电脑编译失败,在家里的电脑就能编译通过,不了解为什么。

1、为什么int 整形 可以成立?程序中赋的可都是字符。
答:int ArrayName[5];   /*可以替换上一行代码*/
    ArrayName[0]="WangJiasheng";    /*为数组元素赋值*/
    数组ArrayName的元素是int型的,"WangJiasheng"是字符串常量,是放在内存常量区,有地址的,这种ArrayName[0]="WangJiasheng"; 错误的用法是把字符串常量“WangJiasheng”的地赋给了ArrayName[0],恰恰下面继续用这种printf("%s\n",ArrayName[index]);错误的用法把ArrayName[index]指向的东西打印出来了。可以做这个实验验证一下:
    int ArrayName[5];   /*可以替换上一行代码*/
    char *p="WangJiasheng";
    ArrayName[0]="WangJiasheng";    /*为数组元素赋值*/
   
    printf("ArrayName[0] is %s\n",ArrayName[0]);
    printf("ArrayName[0] address is 0x%x\n",ArrayName[0]);
    printf("p is %s\n",p);
    printf("p address is 0x%x\n",p);
   
    p和ArrayName[0]按%s打印出来都是WangJiasheng,p和ArrayName[0]按照数值%d打印出来都是“WangJiasheng”的内存地址。
2、char * ArrayName[5] 可成立, char ArrayName[5] 却不能成立为什么?
答:char * ArrayName[5] 是一个有5个指针的数组,每个指针是指向一个字符串。所以用它来接收5个字符串("WangJiasheng")正好
    char ArrayName[5] 是一个有5个字符的数组,每个元素是char型取值范围在-128~127直接,,"WangJiasheng"是字符串常量,是放在内存常量区,有地址的,但这个地址一般都挺大的,用char型强型接收它会截断,而这个很小的内存地址一般是留给Os的,不允许操作。所以在windows下报“该内存不能为read”,在linux下一般就是报段错误“Segment fault”。可以用下面的代码验证一下:
    char ArrayName[5];   /*可以替换上一行代码*/
    char *p="WangJiasheng";
    ArrayName[0]="WangJiasheng";    /*为数组元素赋值*/
    printf("ArrayName[0] address is 0x%x\n",ArrayName[0]);
    printf("p address is 0x%x\n",p);

总有那身价贱的人给作业贴回复完整的代码
2011-11-09 23:08
快速回复:int 类型 执行了 char 类型 这为什么!谢谢那位解答。(难道这题真的没 ...
数据加载中...
 
   



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

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