#include <stdio.h>
int main()
{
char str[3][15] = {"Pointer to","char","program"};
char (*pt)[15] = str; // statement A
char *p = (char *)str; // statement B
printf("%s\n",p[3]); // statement C - Seg Fault in this line
printf("%s\n",p); // working properly displaying "Pointer to"
printf("%s\n",p+1); // here it is pointing to second element of first array so displaying "ointer to"
printf("%s\n",pt+1); // printing properly "char" as expected
int num[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*nm)[3] = num[1];
int *n = num;
printf("n - %d\n",n[10]); // statement D
printf("nm - %d\n",nm[0][0]);
return 0;
}
Meine Fragen:Was ist der Unterschied zwischen Zeiger auf 2D-Char-Array und Zeiger auf 2D-Int-Array?
Bitte helfen Sie mir klare Vorstellung über die Daten zu erhalten, in Fall von char-Array und Int-Array Speichermechanismus
In oben Programm Ich verstehe, dass, wenn die Maus zu Char-Array wird auf 2D-Array von Zeichen wie in Anweisung A gezeigt, es ist ordnungsgemäß angezeigt, aber wenn es von normalen Char-Zeiger gezeigt wird und versuchen, das Zeichen in Anweisung C zu drucken, erhält es Se gFault, stattdessen sollte es 'n' (3. Nummer Zeichen im ersten Array "Zeiger to") so mit der Verwirrung, warum im Fall Array ich bekomme richtig Element n = 11 in Anweisung D und warum in diesem Fall (Anweisung C) es wird nicht ordnungsgemäß gedruckt.
Wie werden die Daten im Falle eines char-Array gespeichert wird es in dieser Form unter
char str[3][15] = {{'P','o','i','n','t','e','r',' ','t','o'},
{'c','h','a','r'},
{'p','r','o','g','r','a','m'}};
wenn es so gespeichert wird, dann sollte es funktionieren wie gezeigt gespeichert werden Array des Integer-Zeigers in Anweisung D Bitte helfen Sie mir, zu diesem Problem zu führen und das Problem zu klären, das ich im Falle von char und int Array-Speicher habe.
'char str [3] [15] = {{'P', 'o', 'ich', 'n', 't', 'e', 'r', '', 't', '0', {'c', 'h', 'a', 'r', '\ 0'}, {'p', 'r', 'o', 'g ',' r ',' a ',' m ',' \ 0 '}}; ' – LPs
Anweisung D funktioniert, weil' num' als einzelnes Array zugewiesen wird, auf das der Compiler mit der folgenden Formel zugreift: num [row] [col] 'dann ist es das gleiche wie' * ((int *) num + row * 4 + col) '. – miravalls
'printf ("% s \ n ", p [3]);' -> 'printf ("% s \ n ", &p[3]);' – LPs