2017-07-28 50 views
-1

對於一維數組,我沒有訪問數組元素的問題。例如 -如何用指針格式表示多維數組?

#include<typeinfo> 
#include<iostream> 
#include<vector> 
using std::cin; 
using std::cout; 
using std::endl; 
using std::vector; 
using std::string; 
int main() 
{ 
     int a[3] = {1, 2, 3}; 
     cout << *(a + 0); 
     return 0; 
} 

但是,當我試圖爲2維數組,我得到的那種輸出 -

#include<typeinfo> 
#include<iostream> 
#include<vector> 
using std::cin; 
using std::cout; 
using std::endl; 
using std::vector; 
using std::string; 
int main() 
{ 
     int a[][3] = {1, 2, 3}; 
     cout << *(a + 2); 
     return 0; 
} 

輸出 -

0x7ffca0f7ebcc 

我怎樣才能以第一個例子中描述的格式獲得輸出爲2(我將按行主或列主順序獲得2,但C++遵循行主要數組表示形式)?

+0

這是因爲第二種情況下的*(a + 2)產生一個int(*)[3]結果,所以你得到一個指針打印。現在你將如何從指針獲取對象? (還有什麼與不相關的包括和使用...) – DeiDei

回答

1

這會給你第一行的第三個元素。

#include <iostream>  
int main() 
{ 
    int a[][3] = {1, 2, 3}; 
    std::cout << *(*a + 2); 
} 

儘管您可能會發現a[0][2]更易於理解。

0

對於原始陣列,C++繼承自C那個

a[i] 

規則被變換爲

*(a + i); 

要訪問二維陣列,我們可以兩次應用此規則:

a[i][j] => *(a[i] + j) => *(*(a + i) + j) 

儘管顯然a[i][j]語法更容易理解。