2015-02-10 58 views
1

嗨我只是開始讓我的頭圍繞指針和數組,並且我或多或少知道如何操縱一維數組中的指針來顯示元素。但是在多維數組中呢? 我已經練習與此代碼:使用指針來顯示多維數組中的元素

#include<iostream> 
using namespace std; 
int main() 
{ 

    int a[2][3]= { {1,2,3},{4,5,6}}; 
    int (*ptr)[3] = &a[0]; // or (*ptr)[3] = a; 

    cout <<"Adress 0,0: "<< a << endl; 
    cout <<"Adress 0,0: "<< ptr << endl;   
    cout <<"Value 0,0: "<< *a[0] << endl; 
    cout <<"Value 0,0: "<< *(ptr)[0]<< endl; 
    cout <<"Adress 0,1: "<< &a[0][1] << endl; 
    cout <<"Adress 0,1: "<< (ptr)[1] << endl;  

    return 0; 
} 

我已成功地顯示的地址和值A [0] [0],用陣列名稱以及指針,但如何顯示的地址和值a [0] [1]和後續元素通過使用指針?

+0

'(ptr)[1]'不指向'a [0] [1]',它指向'a [1] [0]'。 – emlai 2015-02-10 17:30:01

+0

我想如果你想從你的數組數組中提供值「2」,你就試圖敲擊'(* ptr)[1]'。這個元素的地址就是'(* ptr)+ 1'(或者,如果你想冗長的話,'*(ptr + 0)+1' – WhozCraig 2015-02-10 17:31:17

回答

1

(ptr)[1](如ptr[1]相同),沒有指向a[0][1],它指向a[1][0],因爲你定義ptr爲指針int[3],不int。因此遞增ptr1ptr[1]跳過三個int s,直到a[1][0]

通過中的一個int而不是三個int S上的尺寸要增加ptr

ptr[0] + 1 

上面將指向a[0][1]。而訪問:

*(ptr[0] + 1) 
+0

謝謝@zenith澄清。 (或跳過)3英寸,這就是爲什麼它打印4而不是2. – datachat 2015-02-11 01:13:49

1
#include<iostream> 
    using namespace std; 

    int main() 

{ 

    int a[2][3]= { {1,2,3},{4,5,6} }; 
    int (*ptr)[3] = &a[0]; // or (*ptr)[3] = a; 

    cout <<"Adress 0,0: "<< a << endl; 
    cout <<"Adress 0,0: "<< ptr << endl;   
    cout <<"Value 0,0: "<< *a[0] << endl; 
    cout <<"Value 0,0: "<< *((ptr)[0]+0)<< endl; 
    cout <<"Adress 0,1: "<< &a[0][1] << endl; 
    cout <<"Adress 0,1: "<< (ptr)[0]+1 << endl;  
    cout <<"value 0,1: "<< a[0][1] << endl; 
    cout <<"value 0,1: "<< *((ptr)[0]+1) << endl; 

    cout <<"Adress 1,0: "<< &a[1][0] << endl; 
    cout <<"Adress 1,0: "<< (ptr)[1] << endl;  
    cout <<"value 1,0: "<< a[1][0] << endl; 
    cout <<"value 1,0: "<< *((ptr)[1]+0) << endl;  

    return 0; 
} 

希望這將清除您的疑問。

+0

謝謝你的澄清,我現在明白如何遍歷2維數組使用指針。 – datachat 2015-02-11 01:10:19