c++中的char* 和char[]的使用

来源:互联网 发布:淘宝模特摄影 知乎 编辑:程序博客网 时间:2024/05/16 11:16
首先当使用char*或者char[]来表示字符串时,加上string.h头文件来调用库函数。
1、char
char只表示一个字符,若重复赋值,则或者会覆盖前者:
 char ch='qwqewqe';
cout<<ch<<endl;
输出:e 
因为char只有一个字符,后者会覆盖前者。

2、char * src表示字符串
char *src="qwqewqe";
    cout<<src<<endl;
这里的src为指针,指向的就是该字符串的首地址开始表示的内容 。


可以使用src[i]获取第i的字符;也可以使用src+i代表第i个字符

可以使用src获取整个串;

可以使用&src获取存放该字符串的首地址:

    char *src="qwertyu";

    cout<<src[0]<<" "<<src[1]<<" "<<src[2]<<endl;

    cout<<src<<endl;

    cout<<&src<<endl;



这里如果想使用printf输出,只能使用src,不能加&

因为*src代表src本身就是一个指针,指向src的首地址,使用src就可以输出了,而如果&src则是代表指针自己的储存位置(src地址的地址),因此错误!!

    printf("%s\n",src);//正确

    printf("%s\n",&src);//错误


正常:int a=3;

printf("%d",a);  =>3

printf("%d",&a); =>a的地址


3、char src[]表示字符串

    char src[]="qwertyu";
使用src[i]获取第i个字符:
    cout<<src[0]<<" "<<src[1]<<" "<<src[2]<<endl;  
使用src获取整个字符串:
    cout<<src<<endl;
使用&src获取首地址:
    cout<<&src<<endl;
在使用printf时,加不加&都是可以的:
    printf("%s\n",src);//正确
    printf("%s\n",&src);//正确


src+i,代表第i个字符:
    char src[]="qwertyu";
    cout<<src+1<<endl;



4、内存占用空间比较:
char *src="qwertyu";
cout << sizeof(src)<<endl;
输出为4 说明*src为字符串,占用4个字节

char src[]="qwertyu";
cout << sizeof(src)<<endl;
输出为8(7个字符+1个\0)

5、求字符串中字符的个数:

使用string.h中的库函数:srelen求字符串的长度:
char *src="qwereeyu";
cout << sizeof(src)<<endl;
输出8
改成 char src[]="qwereeyu";结果一样


6、char *[]字符串数组的元素个数:
    char *m[]={"a", "hello"};
    cout<<sizeof(m[0])<<endl;      //这里求得的是一个的元素占用的空间大小(4字节,为默认char类型字符串分配4字节)
    cout<<sizeof(m)<<endl;        //这里求得是m二维数组占用的空间总大小(8字节)
    cout<<sizeof(m)/sizeof(m[0])<<endl;//这里是求m数组一共有多少个字符串元素


    char m[2][10]={"a", "hello"}; //需指定每一个元素占用的字节
    char **m={"a", "hello"}; //错误!!不要使用这种方法
    cout<<sizeof(m[0])<<endl;   //输出10 位自己指定的
    cout<<sizeof(m)<<endl;
    cout<<sizeof(m)/sizeof(m[0])<<endl;




最最最重要!!!

char dst[]="fsdfsd";//这里的字符串都在栈区,可以被改变
char *src="fsdfsd";//这里的字符串放在常量区(不能改变),而dst放在栈区,当改变字符串的值时程序会崩溃!!
例如 执行:dst[0]='1'; 没有问题
但是执行 src[0]='1'; 程序就会崩溃!!
因此若调用函数对字符串进行修改时,应该定义成dst[]的形式,而不能是*dst的形式!!
关于这两个函数的具体区别:
http://blog.sina.com.cn/s/blog_47fa4cef0100hgnj.html

调用strcpy函数:
int main()
{
char src[]="qwereeyu";
char dst[]="fsdfsd";
scy(src,dst,3);
cout<<dst<<endl;
return 0;
}
在函数中,都是使用的指针,包括形参也是,因此都是对同一个src和dst进行操作,没有问题。
char *scy(char *src, char *dst, int size_n)
{
    int a=strlen(src);
    int b=strlen(dst);
    if(a<size_n)
    {
        cout<<"error"<<endl;
        return "null";
    }
    cout<<a<<b<<endl;

    for(int i=0;i<size_n;i++)
    {
       // *dst++=*src++;
        dst[b+i]=src[i];
    }
    return dst;


strcpy函数的专业实现:
http://blog.csdn.net/gpengtao/article/details/7464061/

0 0
原创粉丝点击