2016-06-30 17 views
-6
#include <iostream> 

using namespace std; 

const int MAX = 4; 

int main() 
{ 

    char *names[MAX] = { 
     "Zara Ali", 
     "Hina Ali", 
     "Nuha Ali", 
     "Sara Ali", 
    }; 

    char *ptr[MAX]; 

    for (int i = 0; i < MAX; i++) 
    { 
     ptr[i] = &names[i]; 
    } 

    for (int i = 0; i < MAX; i++) 
    { 
     cout << "Value of names[" << i << "] = "; 
     cout << *ptr[i] << endl; 
    } 

    return 0; 
} 
+0

Was haben Sie getan, das Problem zu lösen versuchen? Neben dem Kopieren/Einfügen Ihres Codes in SO? –

+0

Haben Sie darüber nachgedacht, die Zeile zu überprüfen, auf die der Compiler zeigt, und zu prüfen, ob etwas fischig ist? – Lundin

Antwort

4

Sie ändern müssen:

ptr[i] = &names[i]; // `&names[i];`is pointer to char* 

zu

ptr[i] = names[i]; 

eine andere Sache ist, dass Sie sollten Laden Literale als const char* und nicht char*, ändern, so auch:

char *ptr[MAX]; 
char *names[MAX] = { 

zu:

const char *ptr[MAX]; 
const char *names[MAX] = { 

Sie oben in Ihrem Compiler-Fehler/Warnungen lesen, so schlage ich vor, Sie lernen, wie sie zu lesen, in diesem Fall:

prog.cc:23:13: error: assigning to 'char *' from incompatible type 'char **'; remove & 
    ptr[i] = &names[i]; 
      ^~~~~~~~~~ 

Compiler gibt Ihnen Informationen genau wo die Zuordnung liegt, gibt es auch genaue Informationen was zu tun ist: remove &. Dieser Ausgang stammt von clang, von dem ich denke, dass er eine der besten Fehlermeldungen hat.

1

Was sagte Marcin

ptr[i] = names[i]; 

ist dies, weil Namen [i] tatsächlich ein Zeiger ist. schließlich um

cout << ptr[i] << endl; 

zu drucken, weil ptr [i] ist auch ein Zeiger

Verwandte Themen