| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 982 人关注过本帖
标题:依旧是指针输出问题
只看楼主 加入收藏
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
依旧是指针输出问题
#include<iostream>
using namespace std;

int main()
{
    char a[5]={'z','h','o','n','g'};
    char *s=a;
    char *p="abcde";

    for(int k=0;k<5;k++)
    {
        cout<<s[k];
    }
    cout<<endl;

    cout<<s<<endl;
    cout<<p<<endl;
    cout<<&a<<endl;
    cout<<(void *)s<<endl;        //输出指针s指向的地址
    cout<<sizeof(s)<<endl;
    cout<<sizeof(a)<<endl;

    return 0;
}
我的问题是:我希望语句cout<<s<<endl;输出zhong,但是它输出时zhong后面带了几个汉字和一个向上的箭头。所以我从它存储的地址分析,但毫无进展,反而有了新问题,一个指针它的值是地址值,所占内存永远是4字节,而地址值是16位,按照8位为一字节算,应该是2字节,为什么输出4字节呢?我的电脑是64位,编译器是VC++6.0。希望大家能解答。
搜索更多相关主题的帖子: zhong return include 汉字 
2013-09-22 22:40
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
改这两句
 cout<<*s<<endl;
 cout<<*p<<endl;

三十年河东,三十年河西,莫欺少年穷!
2013-09-22 22:50
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
char a[6]={'z','h','o','n','g','\0'};

总有那身价贱的人给作业贴回复完整的代码
2013-09-22 22:53
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
收藏
得分:0 
回复2楼,修改cout<<s<<endl并不能达成目的,因为s保存的是数组a第一个字符的地址,在s前添加一个取值符*,表示你输出的是z,而不是我想要的zhong。
2013-09-22 23:19
康信文
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2013-9-17
收藏
得分:3 
Desktop.zip (55.96 KB)
2013-09-23 00:10
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:3 
你要想以字符串输出,必须最后加\0,或者定义string类型

who告诉你指针是2个字节,是根据机器字长决定的,
不过现在一般是4个字节

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






2013-09-23 00:23
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:3 
是4字节
2013-09-23 00:45
domoke
Rank: 2
等 级:论坛游民
帖 子:36
专家分:71
注 册:2013-9-11
收藏
得分:3 
     char a[]={"zhong"};
     char *s=a;
     char *p="abcde";
我改成了这样,输出没问题了,后面的问题有点高端,没懂
2013-09-23 13:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
指針的尺寸並不完全由機器字長決定。在64位的機器和系統上跑VC++6,其指針也仍然是32位的,若跑TC,則是16位的,在高版本的VC中,編譯器會檢測系統默认採用64位指針,但也可以用編譯參數強制只用32位指針。在編程中,不要假定int和指針的尺寸,是傳統忠告。

授人以渔,不授人以鱼。
2013-09-23 13:37
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
收藏
得分:0 
以下是引用TonyDeng在2013-9-23 13:37:57的发言:

指針的尺寸並不完全由機器字長決定。在64位的機器和系統上跑VC++6,其指針也仍然是32位的,若跑TC,則是16位的,在高版本的VC中,編譯器會檢測系統默认採用64位指針,但也可以用編譯參數強制只用32位指針。在編程中,不要假定int和指針的尺寸,是傳統忠告。

也就是说现在我的机器上指针是32位了,所以采用sizeof(s)输出时,结果为4。追问:地址不都是16位的,我发现我的电脑输出地址值是0018FF40,按照16进制与二进制换算,它是32位的,这样解释对吗?还有为什么加了'\0'却可以了,我搞不懂,为什么我先前会输出带中文和向上箭头的,这问题我纠结了好久。
2013-09-23 14:17
快速回复:依旧是指针输出问题
数据加载中...
 
   



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

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