| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 982 人关注过本帖
标题:依旧是指针输出问题
取消只看楼主 加入收藏
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
依旧是指针输出问题
#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
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
收藏
得分:0 
回复2楼,修改cout<<s<<endl并不能达成目的,因为s保存的是数组a第一个字符的地址,在s前添加一个取值符*,表示你输出的是z,而不是我想要的zhong。
2013-09-22 23:19
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
qiqid
Rank: 2
等 级:论坛游民
帖 子:36
专家分:12
注 册:2013-3-31
收藏
得分:0 
我现在可以断定是越界问题了,刚才调试了,我加大数组空间就可以正常输出。我原先没有考虑到采用这种赋值方法char a[5]={'z','h','o','n','g'};时,会在字符最后添加'\0',而'\0'是作为字符串的结束标示的,所以说最后的'\0'被冲掉了。最后感谢大家的帮助,浪费大家时间了。
2013-09-23 15:06
快速回复:依旧是指针输出问题
数据加载中...
 
   



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

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