Gast
#5037507
Für mich liest sich dieses Beispiel als ob man einem Zeiger eine Adresse zuweist. Ist das nicht böse?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Output : New Value of ptr : 1004
|
Anzeige
|
Frage zu Zeiger
Gast
#5037507
Für mich liest sich dieses Beispiel als ob man einem Zeiger eine Adresse zuweist. Ist das nicht böse?
Output : New Value of ptr : 1004 timertick_t schrieb: > Ist das nicht böse? Meistens schon. Ausnahme: Gerät oder Mikrocontroller, deren I/O an ebensolcher Adresse sitzt.
Gast
#5037516
timertick_t schrieb: > Für mich liest sich dieses Beispiel als ob man einem Zeiger eine > Adresse > zuweist. Ist das nicht böse? Nö. Was soll man einem Zeiger denn sonst zuweisen, wenn nicht eine Adresse?
Gast
#5037526
Autor: A. K. (prx) schrieb: Ausnahme: Gerät oder Mikrocontroller deren I/O an ebensolcher Adresse sitzt. Aaah! Jetzt kommen wir der Sache näher. In dem Original-Beispiel des Autors wird nämlich für ein int nur eine Größe von 2 Bytes angegeben. Dann passt das zusammen... Dann ist das hier wohl ein Sonderfall...
Gast
#5037664
So the point is that, when you say some value 1000, it is treated as an integral constant in C language standards. When you say int *ptr; ptr is fully qullified to hold some memory location XXXX such that consecutive 4 bytes(as a typical gcc compiler supports) from XXXX represents a reserved memory location for an integral variable. Now when you say (int *)XXXX you want to typecast the value XXXX which is currently of integer type to be treated as of address type, and so when you say int *ptr = (int *) 1000; you are declaring a pointer type variable which is allowed to hold a memory location and the correct way to get memory location is to have some symbol which is representing a memory location and then get the location that symbol is representing by using & operator with that, i.e. int *ptr = &a; The code you have wrote tries to treat 1000 as a memory location value for an integral variable and puts it into pointer variable ptr. Although for security reasons it must not be allowed, but still, these are some security threats which hackers exploit m in C language constructs.
Gast
#5038188
Öhmmmm, wofür braucht man einen Pointer, wenn man ihm keine Adresse zuweist? Komisch schrieb: > Öhmmmm, wofür braucht man einen Pointer, wenn man ihm keine Adresse > zuweist? Hier geht es im eine Adresse in Form einer gecasteten Zahl. Üblicherweise wird die Adresse eines Objektes zugewiesen.
Gast
#5038501
timertick_t schrieb: > Für mich liest sich dieses Beispiel als ob man einem Zeiger eine Adresse > zuweist. Ist das nicht böse? > int *ptr=(int *)1000; Für mich liest sich das wie eine der vielen C-Schreiber-Schludrigkeiten. Na klar, man kann sowas schreiben, der Compiler hat gewöhnlich nix dagegen. Aber es liest sich schlecht. Also trenne einfach die Typdefinition von der Variablendeklaration und diese von der Wertzuweisung. Dann wird es verständlicher und lesbarer. Ach ja.. überlege dir mal als kleine Denksportaufgabe, wo ptr und wo deine 1000 vom Compiler hingepackt werden. (Denk-Alternative: const int Tausend = ...) W.S. timertick_t schrieb: > New Value of ptr : 1004 Aha, also ein Pointer ist auf dieser Architektur 4 Bytes gross. Viel spannener wird die Aufgabe dann wenn als erste Zeile stehen würde:
Gast
#5039479
Eric B. schrieb: > Aha, also ein Pointer ist auf dieser Architektur 4 Bytes gross. Nein! Das der neue Wert 1004 ist liegt daran, weil der Datentyp auf den der Zeiger zeigt (auf dieser Architektur) 4 Byte gross ist, nicht weil der Zeiger 4 Byte gross ist. Das ist ein fundamentaler unterschied.
Wie du siehst: Die groesse des Zeigers hat nichts mit dem neuen Wert von ptr zu tun. Dafuer ist ausschliesslich die Groesse des Datentyps, auf den gezeigt wird, verantwortlich. Kaj schrieb: > Eric B. schrieb: >> Aha, also ein Pointer ist auf dieser Architektur 4 Bytes gross. > Nein! > Das der neue Wert 1004 ist liegt daran, weil der Datentyp auf den der > Zeiger zeigt (auf dieser Architektur) 4 Byte gross ist, nicht weil > der Zeiger 4 Byte gross ist. Ah stimmt, haste Recht. Hab da wohl zu schnell geschossen, zu wenig Kaffee getrunken :-)
Gast
#5039540
A. K. schrieb: > Komisch schrieb: >> Öhmmmm, wofür braucht man einen Pointer, wenn man ihm keine Adresse >> zuweist? > > Hier geht es im eine Adresse in Form einer gecasteten Zahl. > Üblicherweise wird die Adresse eines Objektes zugewiesen. Und wenn das Objekt ein Register ist? Was meinst, was wohl im Header file steht, ein #define mit einer Zahl vielleicht? Du bist mir ein Schlaumeier. ?
Gast
#5046479
Eric B. schrieb: > Viel spannener wird die Aufgabe dann wenn als erste Zeile stehen würde: Solange kein Zugriff erfolgt, ist eine ungerichtete Adresse nicht weiter schlimm. Interessanter finde ich die Adresse "020". Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|