| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2573 人关注过本帖
标题:char 型指针变量的特点
只看楼主 加入收藏
hmsabc
Rank: 2
来 自:贵州省兴义市
等 级:论坛游民
帖 子:97
专家分:19
注 册:2010-8-2
结帖率:100%
收藏
 问题点数:0 回复次数:9 
char 型指针变量的特点
程序代码:
//char 型指针变量的特点

#include<iostream>
using namespace std;

int main( )
{
    char * pstr[] = { "Robert Redford",               //数组未提供参数
        "Hopalong Cassidy",
        "Lassie",
        "Slim Pickens",
        "Boris Karloff",
        "Oliver Hardy",
        "Huang MingSheng",
        "Wgh miss"
    };                                                 //声明指针数组,并赋初值,注意有分号

    int count = (sizeof pstr) / ( sizeof pstr[0]);

    char * pstart = "Your lucky star is " ;            //声明一个 char 型指针,并赋初值 这是 char 型指针变量的特点
    int dice = 0;
   
    cout << endl
        << " Pick a lucky star!" << endl
        << " Enter a number between 1 and " << count << ": ";
    cin >> dice;                                        //输入数据


    cout << endl;


        if(dice >= 1 && dice <= count)                 //如果 1 <= dice <= count
            cout << pstart << pstr[dice - 1];  //这里第一个输出 pstart ,意味着输出的是字符串,这是 char 型指针的特点

        else
            cout << "Sorry, you haven't got a lucky star.";
    cout << endl; 
    cout << "The dice bit number is: " << sizeof dice << endl;                         // 变量 dice 占用的内存字节数
    cout << "Number of array element is: " << (sizeof pstr) / ( sizeof pstr[0]) << endl;     //输出数组元素的数量

    system("pause");
    return 0;
}



[ 本帖最后由 hmsabc 于 2010-8-26 19:18 编辑 ]
搜索更多相关主题的帖子: 变量 char 指针 特点 
2010-08-26 19:16
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
  
可我有一个问题不懂,下面的代码为什么会出现内存错误..
将string arr[3];定义成char arr[3][20];就不会出错..

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s="asdf er wqeqrtrwt ";
    string arr[3];
    int i=0,j=0,k=0;
    for(;s[k]!='\0';k++)
    {
        if(s[k]!=' ')
        {
            arr[i][j++]=s[k];
        }
        else if(s[k+1]!=' ')
        {
            arr[i][j]='\0';
            i++;
            j=0;
        }
    }
    if(s[k-1]!=' ')
    {
        arr[2][j]='\0';
    }
    for(int t=0;t<3;t++)
    {
        cout<<arr[t]<<endl;
    }
    return 0;
}
2010-08-27 00:19
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
回复 2楼 无名可用
你研究一下string 的用法吧~~
string s;
s应该是个对象,而不是单纯的字符串数组~~

[ 本帖最后由 mxs810 于 2010-8-27 08:58 编辑 ]

授人以鱼不如授人以渔
2010-08-27 08:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
string 的内存是动态分配的,你用的时候它的内存可能还没分配呢,所以一写就可能出内存错误。用 [] 给 string 元素的引用,不做越界查。用 at 的话,如果出界了,会抛 out of range 异常。
这个你一般可以用 push_back 来做。凡是类似 arr[i][j++]=s[k] 的语句,你全换成 arr[i].push_bach(s[k]); 这样 j 这个变量就可以省了,这个函数是往 string 的末尾加东西。
2010-08-27 09:43
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,另外不必在 string 的末尾加 '\0'。
它和 C 语言里的字符串区别还是挺大的,你可能会觉得 string 很难使,但应该只是不习惯而已。它的好多功能还是挺强大的,但用法和以前 C 语言里的很多东西不一样了。当然复杂程序也上去了。
2010-08-27 09:49
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
换成 arr[i].push_bach(s[k])时会报错,我看了MSDN,用arr[i].insert(arr[i].end(),s[k])来代替也可以,多谢了。。
2010-08-29 00:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
报错?它是说没这个函数吗?
2010-08-29 16:45
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
好像是。
error,C2039:“push_back” is not a member of basic_string<char>
2010-08-29 19:42
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
受教了。感谢楼主!
呵呵

南国利剑
2010-09-01 00:05
hmsabc
Rank: 2
来 自:贵州省兴义市
等 级:论坛游民
帖 子:97
专家分:19
注 册:2010-8-2
收藏
得分:0 
回复 9楼 南国利剑
互相学习,不用客气。
2010-09-01 08:29
快速回复:char 型指针变量的特点
数据加载中...
 
   



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

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