Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Das ist nicht zwingend so! Hängt ganz vom Compiler ab, wie er ein mehrdimensionales Array in den Speicher schreibt. Keine sichere Aussage kann man allerdings bei einem Array von nullterminierten String mit (zur Compilierzeit) unbekannter Länge treffen. Sukzessive Aufrufe vom malloc (o.ä.) garantieren nämlich nicht, aufeinanderfolgende Speicherbereiche zu reservieren.freakyjoe hat gesagt.:tja ein 2 dimensionales ist in C ein Eindimensionales im Speicher
i[j][k]=y;
*(i + j*10 + k)=y;
*(*i + j*10 + k) = y;
*(*(i + j) + k) = y;
Matthias Reitinger hat gesagt.:Das ist nicht zwingend so! Hängt ganz vom Compiler ab, wie er ein mehrdimensionales Array in den Speicher schreibt. Keine sichere Aussage kann man allerdings bei einem Array von nullterminierten String mit (zur Compilierzeit) unbekannter Länge treffen. Sukzessive Aufrufe vom malloc (o.ä.) garantieren nämlich nicht, aufeinanderfolgende Speicherbereiche zu reservieren.
int x[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}};
Matthias Reitinger hat gesagt.:Nicht ganz, es würde wenn dann zuwerden.Code:*(*i + j*10 + k) = y;
Wobei es tatsächlich so ist, dass darausentsteht (bei den mir bekannten Compilern zumindest).Code:*(*(i + j) + k) = y;
Nö, das ist Käse. x zeigt auf ein Array von zwei Zeigern. Diese zeigen wiederum auf jeweils ein Array mit vier Integer-Werten. Wo diese beiden Integer-Arrays liegen, ist dabei nicht festgelegt – sie können (und werden meistens auch) direkt hintereinander im Arbeitsspeicher liegen. Muss aber nicht zwingend sein. Würde mich interessieren, wo das „amtlich“ hinterlegt ist, dass das nicht so ist.freakyjoe hat gesagt.:ganz recht, nur guck dir mal folgende Initialisierung an und sag mir, wie der Compiler das im Speicher "zerreißen" soll
int x[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}};
er legt es ab der Speicherstelle auf die x (nicht *x) zeigt so ab 1 2 3 4 5 6 7 8
das ist amtlich in C (auch in C++)
int x[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8} };
printf("%d\n%d\n", *x, **x);
Wiederum falsch, sorry. Du hast hier ein Array von Zeigern, die auf Arrays von Integerzahlen zeigen. Die Adresse des ersten Elementes steht also in *i oder aber auch in i[0], wenn dir das lieber ist.die Adresse des ersten Elementes von i[][] ist i und nicht *i also stimmt *(i+10*j+k) um den inhalt der Speicheradresse der j-ten zeile in der k-ten Spalte anzusprechen.
int i[10][10];
int j, k;
j = 2; k = 6;
i[j][k] = 1234;
printf("%d\n", *(i+10*j+k));
printf("%d\n", *(*i+10*j+k));
Matthias Reitinger hat gesagt.:Nö, das ist Käse. x zeigt auf ein Array von zwei Zeigern. Diese zeigen wiederum auf jeweils ein Array mit vier Integer-Werten. Wo diese beiden Integer-Arrays liegen, ist dabei nicht festgelegt – sie können (und werden meistens auch) direkt hintereinander im Arbeitsspeicher liegen. Muss aber nicht zwingend sein. Würde mich interessieren, wo das „amtlich“ hinterlegt ist, dass das nicht so ist.
int i[10][10]={0};
int*x=i;
int j=3;
int k=6;
i[j][k]=1234;
printf("%d",*(x+10j+k));
imul edx,j,0x00000028
mov eax,k
shl eax,0x02
add eax,edx
mov dword ptr -offsetof(i)[eax+ebp],0x000004d2
Matthias Reitinger hat gesagt.:Wiederum falsch, sorry. Du hast hier ein Array von Zeigern, die auf Arrays von Integerzahlen zeigen. Die Adresse des ersten Elementes steht also in *i oder aber auch in i[0], wenn dir das lieber ist.