mogbo
Banned
Hallo,
eben was in einem Forum gelesen und ein wenig rumprobiert
&a , a und &a[0] ergeben den gleichen Wert, also sollte doch eigentlich *(&a) und *a den gleichen Wert ausgeben?
Mir ist klar, dass wir hier von 2 unterschiedlichen Werten reden, einmal der Adresse und den Inhalt, der nur "zufällig" gleich ist. Ist es nun undefiniertes Verhalten zu erwarten, dass man mit *(&a) und *a den gleichen Wert erwartet? Ich kapiere den Denkfehler dahinter, aber nicht warums der Compiler nicht trotzdem ausgibt?
Output:
Warnings:
eben was in einem Forum gelesen und ein wenig rumprobiert
Code:
#include <stdio.h>
int
main()
{
int a[] = { 1, 2, 3 };
printf("&a = %p\n", &a);
printf(" a = %p\n", a);
printf("&a[0] = %p\n", &a);
printf("**(&a) = %i\n", **(&a));
printf(" *(&a) = %i\n", *(&a)); // undefined behavior?
printf(" *( a) = %i\n", *(a));
return 0;
}
Mir ist klar, dass wir hier von 2 unterschiedlichen Werten reden, einmal der Adresse und den Inhalt, der nur "zufällig" gleich ist. Ist es nun undefiniertes Verhalten zu erwarten, dass man mit *(&a) und *a den gleichen Wert erwartet? Ich kapiere den Denkfehler dahinter, aber nicht warums der Compiler nicht trotzdem ausgibt?
Output:
Code:
&a = 0x7f7ffffc94f8
a = 0x7f7ffffc94f8
&a[0] = 0x7f7ffffc94f8
**(&a) = 1
*(&a) = -224008
*( a) = 1
Code:
cc -O2 -pipe -o test6 test6.c
test6.c:12:33: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
printf(" *(&a) = %i\n", *(&a)); // undefined behavior?
~~ ^~~~~
1 warning generated.