Zeiger als Funktionsparameter; int und char

Hi!
Ich habe eine Frage, die sich auf Zeiger als Funktionsparameter bezieht. Hier mal ein Quellcode:

#include

void funktion (int *ptr, char *pwort);

int main(int argc, char* argv[])
{
funktion (5, „Hallo“);
return 0;
}

void funktion (int *pzahl, char *pwort)
{
printf(„Zahl: %d\nString: %s\n“, *ptr, *pwort);
}

Also, funktion gibt einfach die übergebenen Parameter aus. In der main-Funktion wird nun funktion aufgerufen mit 5 und als String „Hallo“. Funktion hat als Parameter 2 Zeiger, einmal einen int-Zeiger und einen char-Zeiger.
Die Zahl 5 in der main-Funktion liefert ja einen Compiler-Fehler (Konvertierung des Parameters 1 von ‚const int‘ in ‚int *‘ nicht moeglich)
Lösen muss man ja das Problem mit einer Variablen (int a = 5; beim Aufruf der funktion dann mit &a)
Doch wieso liefert eigentlich der String nicht so einen Compiler-fehler?

Danke im Voraus!

Hallo dark Rider !

Die Zahl 5 in der main-Funktion liefert ja einen
Compiler-Fehler (Konvertierung des Parameters 1 von ‚const
int‘ in ‚int *‘ nicht moeglich)

Klar, erwartet wird ein Zeiger auf einen Integer, geliefert wird aber nur ein Integer, also Fehler.

Doch wieso liefert eigentlich der String nicht so einen
Compiler-fehler?

Wieso sollte auch: erwartet wird ein Zeiger auf einen Character und geliefert wird auch ein Zeiger auf einen Character.
Das ist so, weil wenn du als Parameter direkt einen String angibst („Hallo“) so legt der Compiler diesen String einfach irgendwo hin (ist jetzt egal, wo wirklich) und schreibt einen Zeiger auf die entsprechende Stelle in den Code.

mfg
Christof

Hi, Christof!
Kann man sich das dann vereinfacht so vorstellen, dass bei der Compilierung die Zahl 5 im Binärcode dargestellt wird, was dann zu einem Fehler führt, weil ja eigentlich eine Adresse übergeben werden muss und beim String „Hallo“, der irgendwo abgelgt wird ein Zeiger übergeben, der auf den String zeigt?

Danke im Voraus!

Hallo,

Kann man sich das dann vereinfacht so vorstellen, dass bei der
Compilierung die Zahl 5 im Binärcode dargestellt wird, was
dann zu einem Fehler führt, weil ja eigentlich eine Adresse
übergeben werden muss und beim String „Hallo“, der irgendwo
abgelgt wird ein Zeiger übergeben, der auf den String zeigt?

Denke lieber in Typen:
5 hat den Typ int
‚a‘ hat den Typ char
„Hallo“ hat den Typ char*

Wichtig dabei ist, daß Zeichenketten in C kein eigener Typ sind sondern nur Felder von Zeichen, also „Hallo“ ist: ‚H‘ ‚a‘ ‚l‘ ‚l‘ ‚o‘ ‚\0‘ (beachte auch das abschließende ‚\0‘).
Also:
5 - int
‚a‘ - char
„a“ - char* (‚a‘ + ‚\0‘)

Gruß
Diether

Wichtig dabei ist, daß Zeichenketten in C kein eigener Typ
sind sondern nur Felder von Zeichen, also „Hallo“ ist: ‚H‘ ‚a‘
‚l‘ ‚l‘ ‚o‘ ‚\0‘ (beachte auch das abschließende ‚\0‘).
Also:
5 - int
‚a‘ - char
„a“ - char* (‚a‘ + ‚\0‘)

Der Zeiger zeigt nur auf das erste Zeichen der Zeichenkette. Deswegen
auch die Stringterminierung mit ‚\0‘ da man sonst nicht wüsste wo
der eigentliche String enden würde.

Mfg Sören.