Bitte helfen Sie mir, die folgenden Programme zu verstehen.
#include<stdio.h>
int main()
{
int a[7];
a[0] = 1976;
a[1] = 1984;
printf("memory location of a: %p", a);
printf("value at memory location %p is %d", a, *a);
printf("value at memory location %p is %d", &a[1], a[1]);
return 0;
}
&a[1]
y &a+1
. Sind sie gleich oder unterschiedlich?
#include <stdio.h>
int main()
{
int v[10];
int **p;
int *a[5];
v[0] = 1234;
v[1] = 5678;
a[0] = v;
a[1] = v+1;
printf("%d\t%d\t%d\t%d\n", *a[0],*a[1],a[0][0],**a);
printf("%d\n", sizeof(v));
return 0;
}
Ich wollte wissen, wie *a[5]
im Speicher dargestellt wird. Ist *a
einen Basiszeiger, der auf a[0],a[1],a[2],a[3],a[4]
?
#include<stdio.h>
int main()
{
int v[10];
int **p;
int (*a)[10];
a=&v;
printf("%d\n",*a);
return 0;
}
a=v; // gives error why?
hace v
zerfallen hier in *v
. Dann gilt &v
zerfallen in (*)[]v
? & bedeutet const pointer. Wie ist es hier möglich, einen const-Zeiger ohne typecast auf einen non-const-Zeiger zu setzen?
Wo wird das Array im Speicher abgelegt? Wird es im Datensegment des Speichers gespeichert.
#include<stdio.h>
int main()
{
int carray[5]={1,2,3,4,5};
printf("%d\n",carray[0]);
printf("%d\t%d\t%d\n",sizeof(carray),sizeof(&carray),sizeof(&carray[0]));
return 0;
}
BEARBEITET:
Ich habe durch einige der Artikel, die angegeben, dass die einzigen zwei möglichen Situationen, in denen ein Array-Name nicht in Zeiger decyed werden kann, ist die sizeof
y &
. Aber in dem obigen Programm sizeof(&carray)
gibt die Größe mit 4 an. und &carray
zerfällt in (*)[]carray
da es ein r-Wert ist.
Dann die Aussage, dass Array-Namen unter zwei Bedingungen nicht in Zeiger zerlegt werden können sizeof
y &
wird hier falsch.