Ich experimentiere mit C void-Funktionen und Zeichenketten. Ich habe dieses Programm versucht:C Das Drucken desselben Arrays führt zu zwei unterschiedlichen Ergebnissen.
#include <stdio.h>
#include <string.h>
void print(char** test);
int main(){
char* test = "abcdef";
print(&test);
return 0;
}
void print(char** test){
for(int i=0;i<strlen(*test);i++)
printf("%c\n",*test[i]);
}
Es ist für mich druckt die erste a A �
dann Segmentation Fault. Aber nach der Änderung von *test[i]
zu *(*test+i)
was ziemlich genau das gleiche ist, funktioniert es für mich wie erwartet.
Gibt es einen feinen Unterschied *test[i]
und *(*test+i)
wenn nicht, warum funktioniert mein Code in zweiten Beispielen, während es nicht in der ersten?
Dies ist ein [* Operator Vorrang *] (http://en.cppreference.com/w/c/language/operator_precedence) Problem. Der Array-Index-Operator '[]' hat eine höhere Priorität als der Dereferenzierungs-Operator '*'. Etwas, das ein [gutes Anfängerbuch] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) Ihnen hätte sagen sollen (IMO). –
Auch "ziemlich genau das Gleiche" ist * nicht * "* genau * dasselbe". Tatsächlich sind die beiden Ausdrücke, die Sie für "fast das Gleiche" halten, * nicht *. (Siehe meinen vorherigen Kommentar für warum). –
Also um das zu beheben, kann ich '(* test) [i]'? –