string *或char *?

时间:2012-10-13 07:37:08

标签: c++ string pointers char

我在C ++代码中读取String *并感到困惑,是否有必要使用String *?我可以使用char *吗? 例如。 StreamReader有ReadLine()函数,为什么不要求用户先安排一个char数组,函数justs将字符串存储在其中,返回一个char *指针,一切正常。

3 个答案:

答案 0 :(得分:5)

请注意,char*是指向单个字符串或多个字符(字符数组)的指针,而string*是指向单个或多个字符串对象(数组)的指针。但是,C#不支持指向托管类型的指针(例如字符串)

示例:

    unsafe void f()
    {
        char ch = '3';
        char* cPtr = &ch;
        *cPtr = '4'; // ch == '4'
        fixed (char* ccPtr = new char[30])
        {
            *(ccPtr + 15) = '4'; // arr[15] == '4'
        }
        string* ptr; // error: cannot declare a pointer to managed type
        fixed (char* pptr = new string(new char[] { 'a', 'b', 'c' }))
        {
            pptr[2] = 'd';
        }
    }

答案 1 :(得分:0)

我不完全理解你的问题,但字符串*可能引用字符串数组而不是单个字符串。在这种情况下,char *将无效。希望有所帮助。

答案 2 :(得分:0)

在C#中,字符串通常由C#类型string或.net类型String处理(这是相同的事情)。 char*是C / C ++思考字符串的方式。虽然指针确实存在于C#中,但它们确实不是可行的方式(它们在官方上是不安全的)。字符数组将是char[],而不是char*

在C#类中,实例作为引用存储,结构存储为值。引用基本上是指针的托管版本。如果传递一个类实例,则通过引用传递该对象,如果传递的是通过值传递的结构。换句话说,如果您希望将数据作为指向C ++中的类/结构的指针传递,则应使用C#类。优点是您通过引用传递,并且您可以使用它执行您可以使用指针执行的各种操作(如链接列表)。缺点是,如果将类放在类中,则会增加重定向的数量(因此也会增加访问时间)。如果您希望将数据存储为值(例如,为了减少类中结构的间接数),则应使用结构。优点和缺点与结构相反,但您仍然可以使用in / ref参数通过引用传递结构。