2011-04-06 72 views

回答

3

name不是指針,名稱是std::string對象。 &name,其中的指針,是該對象的地址。

7

name不是指針,它是std::string本身。所以&name是該字符串的地址,這意味着該代碼將打印出一個數字。

即使它是一個指針,在其上使用operator &也是合法的:它會返回指針變量在內存中的地址(另一個不同的數字)。

如果你想有一個指針內name的第一個字符,然後用name.c_str()獲得C風格空結尾的字符串(實際上是一個指向字符串的第一個字符),或name.data()它返回一個指針到字符串,但不能保證它將以null結尾。

+1

另外:

int i = 5; int *j = &i; int **k = &j; 

,如果你想一個指針傳遞到具有(通過分配內存的實例)以操縱指針的函數,這是有用試圖改變Ç風格的字符串將導致未定義的行爲(C++ 03 21.3.6/2&17.4.3.8) – 2011-04-06 11:59:05

0

嗨string類有c_str()方法。 使用const char* ptr = name.c_str();

2
  1. name不是指針,它是std::string類型的對象。 &name爲您提供該對象的地址。
  2. 要獲取指向字符串第一個字符的(const-)指針,請使用name.c_str()
  3. 指針也有地址!

    void allocate_string(std::string **foo) { 
        *foo = new std::string(); 
    } 
    
相關問題