PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c] warum scanf("%c",&n); und nicht scanf("%c",n); ????



cyneox
25-06-2003, 12:56
ich hab folgenden code:


#include <stdio.h>

main(void)
{
char n;
fcanf(stdin,"%c",&n);
..
..
exit(0);
}



----->kann mir jemand erklären warum man &n schreiben muss und nicht einfach n... ???
------>ich weiss bei integern muss man es so schreiben (&integer) ...aber warum muss man für ein einziges zeichen das '&' davor schreiben????

anda_skoa
25-06-2003, 15:09
Das hat nichst mit dem Typ der Variable zu tun.
Die scanf Funktion schreibt die Inhalte in Variablen, deren Pointer sie hat.
Du musst also einen Pointer übergeben.

Wenn du nur n übergibts, ist das "Call by Value", d.h. die Funktion bekommt eine Kopie des Inhalts, aber weiß nicht, wo im Speicher die Variable n steht.

Das muss scanf aber wissen, weil es ja das Resultat dorthin schreiben muss.

Ciao,
_

cyneox
26-06-2003, 16:12
ok..und was ist mit dem folgenden beispiel:

#include <stdio.h>

main()
{
char zeichen[100];
scanf("%s",zeichen):

exit(0);
}



-->da muss man aber kein '&' hinschreiben ....warum nicht?????

oracle2025
26-06-2003, 16:27
weil ein Array immer ein Pointer ist

wraith
26-06-2003, 16:30
Original geschrieben von oracle2025
weil ein Array immer ein Pointer ist
Das ist in dieser allgemeinen Aussage sicherlich falsch,gibt viele Bsp. die das zeigen.
Richtig ist,das bei einem Funktionsaufruf ein Array in einen Zeiger auf sein erstes Element degeneriert.

Trillian
26-06-2003, 20:41
Original geschrieben von cyneox
ok..und was ist mit dem folgenden beispiel:

#include <stdio.h>

main()
{
char zeichen[100];
scanf("%s",zeichen):

exit(0);
}



-->da muss man aber kein '&' hinschreiben ....warum nicht?????

Weil in diesem Fall (Array!) "zeichen" = "&zeichen[0]" ist - es liefert also die Adresse des ersten Elements.

cyneox
29-06-2003, 19:01
vielen dank nochmal für eure mühe....ich glaub ich muss noch mal mein c-programmierbuch lesen....(nur eigene stellen)....

thx @ all