2010-03-04 122 views
1

我只是試圖讓我周圍的各種指針概念的頭,我有以下代碼:指向內存分配指針的指針,爲什麼這是錯誤的?

char** a = new char*; // assign first pointer to point to a char pointer 

    char b[10] = "bla bla"; 
    *a = new char; //assign second pointer a block of memory. -> This looks wrong to me!! 
    (**a) = b[2]; 

那麼,什麼是錯的第二個「指針」的內存分配?它運行和東西,但它只是感覺不對。

編輯:

感謝您澄清這一點!我學到了東西!

+4

呃....沒有錯。 – Yacoby 2010-03-04 09:35:46

+0

你爲什麼覺得有什麼問題?如果你試圖把'* a'當作C字符串,那麼*你不能,否則你的代碼就沒問題。 – 2010-03-04 09:37:14

+0

其技術上正確。但是你究竟想要達到什麼目標? – 2010-03-04 14:35:23

回答

1

*a = new char;表示您使用其默認構造函數創建單個char變量。 這相當於*a = new char();而你剛創建的變量的地址賦給指針

2

它沒有什麼不對,除了使用動態內存分配,在C++中的風格相當糟糕。

+0

那麼你如何以良好的C++風格來做呢? – 2010-03-04 09:37:36

+1

char a ='a'; ...或者如果因爲一些不明原因需要雙指針,char a ='a'; char * ap =&a; char ** app = ≈ – Tronic 2010-03-04 09:58:09

2
char** a = new char*; // a is a pointer to a pointer to a type char. allocate a new pointer variable and make a point to it. 
char b[10] = "bla bla"; // define a char array. 
*a = new char; // allocate a new char and make the pointer whose address is in a point to it. 
(**a) = b[2]; // copy the 3rd char of b to the char whose address is pointed by a. 
1

它的「錯」是目前尚不清楚的唯一原因。你顯然同意它不清楚。

在某些情況下,類似的代碼可能是「正確的」,如果名稱更好,班級結構更好,則目標明確,消除對方法的懷疑。

0

它沒有什麼技術上的錯誤。

但是,顯式分配指向指向同一頁代碼中單個元素的指針的指針並不常見。你不會經常這樣做,因爲你很少會說「如果你需要了解FooBar,請問湯姆,湯姆是我的」。

0

沒有錯,技術上。但它似乎很少使用這種風格。

相關問題