Frage zu Pointern in C

06/16/2009 17:23 MÄDMÄN#1
Hi ich wollte mal nen String in C ausgeben mit dem Programm hier:
Code:
#include <stdio.h>

int main(void)	{
	char *string="Hallo Welt\0";
	printf("String:%s",[COLOR="#ff0000"]*string[/COLOR]);
	return 0;
}
was nicht geklappt hat also habe ich es so versucht:
Code:
#include <stdio.h>

int main(void)	{
	char *string="Hallo Welt\0";
	printf("String:%s",[COLOR="Red"]string[/COLOR]);
	return 0;
}
dann hats geklappt meine Frage ist jetzt warum hat das geklappt???

mfg MÄDMÄN
06/16/2009 18:21 schlurmann#2
*name ist eine Dereferenzierung. Das bedeutet, du greifst auf die Daten zu, die an der Adresse liegen auf die der Zeiger zeigt. In dem Fall also der erste Character des Strings.

Du willst allerdings den ganzen String ausgeben, dazu brauch die printf Funktion die Adresse des Anfanges der Zeichenkette (char - Array). Die Nullterminierung wird automatisch eingefügt, darum musst du dich nicht kümmern.
06/16/2009 18:25 ms​#3
Quote:
Originally Posted by MÄDMÄN View Post
Code:
	char *string="Hallo Welt\0";
Hier erstellst du einen Pointer, der zu einem nullterminierenden String zeigt. Das heißt, in "string" steht eine Speicheradresse, also sowas wie beispielsweise 0x06B186DF. Diese zeigt auf die Stelle, wo der String liegt.

Der Grund, warum "string" anstatt von "*string" richtig ist ist, dass du einen String anzeigen willst und printf da nunmal einen Zeiger haben will anstatt den ganzen String. Merke dir am besten, dass man wenn man einen String oder ein Objekt per Parameter an einen Funktion gibt, für gewöhnlich immer einen Pointer nimmt. Die Funktion schaut dann, welcher String auf der Adresse liegt.
Warum? Ganz einfach: jedes mal wenn du Parameter an eine Funktion übergibst werden diese kopiert und auf den Stack gelegt. Und schließlich ist es viel sparsamer, wenn man mal einen kleinen 4-Byte Pointer kopiert anstatt direkt einen ganzen Monster-String.

Edit: Zweiter :\
06/16/2009 18:42 MÄDMÄN#4
ok vielen Dank für eure hilfe
06/16/2009 18:43 schlurmann#5
Ein [Only registered and activated users can see links. Click Here To Register...] sagt mehr als tausend Worte.
06/17/2009 14:48 MÄDMÄN#6
ok ihr bekommt ein thx...