2016-03-06 28 views
0

林twodimensinal動態數組的值試圖讓初始化這樣一個動態數組的所有值:獲得來自storred指針ADRESS

 string** structure= new string*[nombre_attributs](); 
      for(int j=0; j<nombre_attributs; j++){ 
       structure[j]= new string[2](); 
      } 

我可以沒有問題填滿它。然後我在一個名爲adresses_structures的指針數組中保存一個指向這個數組的指針。 我現在如何訪問這個數組中的數據?

這種嘗試:

string *test = adresses_structures[i]; 
    cout << "Value:" << *(test+0)<<endl; 
    cout << "Value:" << *(test+1)<<endl; 
    cout << "Value:" << *(test+2)<<endl; 

並不適用於所有值從陣列中第二行工作。 我已經試過萬噸組合作爲

for(int k=0; k<2;k++){ 
      for(int j=0;j<2;j++){ 
     cout << "Truc:" << *(test + k*2 + j)<<endl; 

      } 
    } 

但沒有什麼似乎能夠得到第二行的值。 感謝您的任何建議。

+0

我只是回答了這個問題,但後來發現名稱上的差異。你有'structure'來存放你的數組,並且我認爲這和'adresses_structures'是一樣的。是對的嗎? – paddy

+0

爲什麼不使用'std :: vector >'? – PaulMcKenzie

+0

@PaulMcKenzie將此作爲分配,我嚴格禁止使用它們。沒有他們,我絕不會這樣做。但我確定有一種方法 – nightslit

回答

-1

我假設,那string** structureadresses_structures一樣。

當你在做*(test+1)你從test地址移動一個字節。您應該按字符串對象的大小移動(檢查sizeof(string))。像這樣:*(test+1*sizeof(string))*(test+2*sizeof(string))

+0

這是不正確的。親自嘗試一下。 – paddy

+0

第二部分。對,我的不好。這是解決方案,如果數組是'void *'type –

+0

不,它不是。你不能在'void *'上執行指針運算,你也不能解引用。 – paddy