2017-07-28 2 views
-1

Für eindimensionale Array habe ich kein Problem, Array-Element zugreifen. Zum Beispiel -Wie wird ein mehrdimensionales Array im Zeigerformat dargestellt?

#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; 
} 

Aber wenn ich für 2-dimensionalen Array bin versucht, bin ich Ausgang der Art bekommen -

#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; 
} 

Ausgang -

0x7ffca0f7ebcc 

Wie kann ich Ausgabe als 2 erhalten (ich bekomme 2 entweder in der Reihenfolge der Zeilenhaupt- oder Spaltenhauptreihe, aber C++ folgt der Zeilenhauptarraydarstellung) in dem Format, das im ersten Beispiel beschrieben wird?

+0

Das ist, weil '* (a + 2)' für den zweiten Fall ein 'int (*) [3]' Ergebnis liefert, so dass Sie einen Zeiger gedruckt bekommen. Nun, wie würdest du das Objekt vom Zeiger bekommen? (Auch was mit den irrelevanten Includes und Usings zusammenhängt ...) – DeiDei

Antwort

1

Damit erhalten Sie das dritte Element der ersten Zeile.

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

Obwohl Sie vielleicht a[0][2] leichter finden zu verstehen.

0

Bei rohen Arrays, C++ erbt die Regel von C, dass

a[i] 

zu

umgewandelt wird
*(a + i); 

Um ein zweidimensionales Array zuzugreifen, können wir diese Regel zweimal anwenden:

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

Obwohl offensichtlich die a[i][j] Syntax ist viel einfacher zu verstehen.

Verwandte Themen