zoukankan      html  css  js  c++  java
  • char * 和char[]的区别以及怎样与string类型进行转换

      由于之前一直使用string类型来操作字符串,这几天突然看了几个程序,发现对char[]和char*类型不甚了解,然后从网上查看了几篇博客,在此进行以下总结。

    博客如下:http://blog.csdn.net/liruxing1715/article/details/6715503

    http://blog.csdn.net/yahohi/article/details/7427724

    一、char*与char[]的区别

    数据在内存中的存储区域 

    1、栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 
    2、堆:就是那些由new或malloc分配的内存块,在不适用时,要手动用delete或free来释放内存区域。
    3、 全局/静态存储区:全局变量和静态变量被分配到同一块内存中,他们共同占用同一块内存区。 
    4、 常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多) 

    有了以上的了解在对char*和char[]进行分析。
     1 #include <iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     char *a = "abc";
     6     char b[3] = { 'a','b' };
     7     b[0] = 'b';
     8     a[0] = 'b';
     9     cout << a << " " << b ;
    10     getchar();
    11 }

    以上代码在运行时时会在第8行处出错,因为char*和char[]的内存分区是不同的。

    上面代码中的char*a = ”abc“的”abc“是常量所以被分配在常量存储区,a为字符指针类型是存放在栈区可以被更改,而常量存储区是不能更改的,是只读区域,所以当你试图去写入数据的时候,会报错。

    而char b[3] = {‘a’,‘b’}的字符a和b是存放在栈区的所以可以进行写操作。

    二、string跟char*类型转换

    1、string转换成char*类型

    string s = ”abc“;
    const char *k = s1.c_str();
    const char *t = s1.data();

    这两个函数返回值只能是const的类型

    2、char*转换成string类型

    char* p = ”abc“;
    string s = p;

    这个操作就是可以直接赋值即可 

  • 相关阅读:
    转://Linux下tmpfs介绍及使用
    Linux操作系统中打开文件数量的查看方法
    转://Oracle 11gR2 ASM磁盘组管理
    oracle 11gR2 ASM添加和删除磁盘
    转://Oracle 11gR2 RAC ASM磁盘全部丢失后的恢复
    第二个冲刺周期-第五天
    第二个冲刺周期-第四天
    第二个冲刺周期-第三天
    第二个冲刺周期-第二天
    第二个冲刺周期-第一天
  • 原文地址:https://www.cnblogs.com/skblog/p/5423129.html
Copyright © 2011-2022 走看看