AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein (Erledigt)[C++] "*cook++"?/des Verschlüsselung/vnc Passwort
Thema durchsuchen
Ansicht
Themen-Optionen

(Erledigt)[C++] "*cook++"?/des Verschlüsselung/vnc Passwort

Ein Thema von chaosben · begonnen am 9. Feb 2006 · letzter Beitrag vom 27. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#1

(Erledigt)[C++] "*cook++"?/des Verschlüsselung/vnc

  Alt 9. Feb 2006, 10:26
Heute mal eine Frage an die C-Spezies unter euch:

Was bedeutet der Zugriff auf *cook++ ?
Ok, den Stern kapiere ich noch. Der dereferenziert den Pointer und ich bekommen den Inhalt.
Aber auf was wird das ++ angewendet? Auf den zurückgegebenen Wert oder auf den Pointer selbst?

Ich brauch das, weil ich grad eine C-Datei (d3des-Verschlüsselung) in Pascal übersetze. Wenn ihr mir schön helft, bekommt ihr dann die Unit. *erpress*
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
thomasw

Registriert seit: 3. Dez 2005
36 Beiträge
 
#2

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 10:28
auf den Pointer, nach dem dereferenzieren
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 10:30
mann ... das ging ja schnell ... danke!
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 11:12
Auf den zurueckgegebenen Wert wird ein Postincrement nie angewendet.
(*cook)++ und *cook++ liefern den gleichen Wert. Bei (*cook)++ ist aber danach *cook inkrementiert, waehrend *cook++ die Referenz (den Pointer) inkrementiert.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#5

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 12:03
Und noch was zur Info:

Code:
c = 5;
a = c++; // a = 5; c = 6;
Code:
c = 5;
a = ++c; // a = 6; c = 6;

Ist ++ NACH der Variablen, so wird erst der Wert der Variablen zurückgegeben, dann erhöht.
Steht das ++ VOR der Variablen, so wird sie erst erhöht und dann der Wert zurückgegeben.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 21:04
Zitat von DevilsCamp:
Und noch was zur Info:

Code:
c = 5;
a = c++; // a = 5; c = 6;
Code:
c = 5;
a = ++c; // a = 6; c = 6;

Ist ++ NACH der Variablen, so wird erst der Wert der Variablen zurückgegeben, dann erhöht.
Steht das ++ VOR der Variablen, so wird sie erst erhöht und dann der Wert zurückgegeben.
In dem Zusammenhang muss ich aber darauf hinweisen, dass der C++Builder dies bei for() Schleifen nicht mehr entsprechend unterscheidet und unterschiedlich umsetzt, sondern immer ein Inkrement nach dem Durchlauf der Schleife macht.

Code:
for (int i=0; i < 10; i++)
  ;
Code:
for (int i=0; i < 10; ++i)
  ;
Ich kenne es von anderen Compilern auf anderen Systemen, das man mit diesem Unterschied den Zeitpunkt des Inkrement steuern konnte. Erste Schleife lief von 0 bis 9, zweite von 1 bis 9.

Vielleicht könnten zu diesem Punkt noch andere was sagen, weil es früher wichtig war und es mich recht erstaunt hatte das der BCB keinen Unterschied macht. Gab es da in den "neueren" Standards Änderungen??
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 22:11
Zitat von Muetze1:
Erste Schleife lief von 0 bis 9, zweite von 1 bis 9.
Hm, der GCC läuft bei beiden von 0 bis 9, sowohl im C99-, als auch im C89-Modus.
Ein anderes Verhalten als ein Durchlaufen von 0 bis 9 würde ich ehrlich gesagt nicht erwarten. Laut C99-Rationale war für C89 die Bearbeitung des letzten for-Arguments immer der letzte Schritt in einem Schleifendurchlauf. Eine for-Schleife wurde in eine while-Schleife umgeschrieben, die so aussah:
Code:
for (arg1; arg2; arg3)
  list;
---------
arg1;
while (arg2)
{
  list;
  arg3;
}
Es würde also jeweils eine seperate Anweisung "++i" oder eine separate Anweisung "i++" in der letzten Zeile der while-Schleife stehen.
Offensichtlich scheinen die von dir angesprochenen Compiler je nachdem, op pre- oder post-increment verwendet wird, mal 'ne while- und mal 'ne do-Schleife draus zu basteln. IMHO eigenartiges Verhalten.
Da du mit der Deklaration der Variable i innterhalb des Schleifenkopfes schon C99 implizierst, habe ich mal ein wenig im Standard gelesen:
Zitat von ISO WG14:
The statement
Code:
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is
evaluated before each execution of the loop body. The expression expression-3 is
evaluated as a void expression after each execution of the loop body.
Es ist jetzt also zwar nicht mehr als Umschreibung einer while-Schleife definiert, aber inhaltlich ist es so wie vorher auch, expression-3 ist das letzte, was ausgeführt wird.
Ich würde sagen, die von dir angesprochenen Compiler sind leicht defective oder implementieren irgendein anderes oder gar kein Standard-C.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 22:21
Alles klar, gut zu wissen. Der entsprechende Compiler war soweit ich mich noch erinnere Turbo C 1.0 auf dem Atari. Auch betraf es noch einen anderen Compiler, wüsste aber nun nicht mehr genau welcher das war.

Und das in dem Beispiel i in der Schleife deklariert wurde kommt nur daher, dass ich es heutzutage so schreibe, daher nicht wundern. Damals wurde i natürlich früher definiert.

Vielen Dank für die Informationen und die Arbeit!
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: [C++] Was bedeutet "*cook++"?

  Alt 9. Feb 2006, 22:34
Zitat von Muetze1:
Der entsprechende Compiler war soweit ich mich noch erinnere Turbo C 1.0 auf dem Atari.
Hm, 1.0 deutet auf seeehr frühes Entwicklungsstadium hin Software war zwar damals noch nicht so sehr ein Bananenprodukt wie heute, aber vielleicht hat sich TC ja tatsächlich nur sehr grob am damals üblichen C orientiert. C89 wird es aber wohl noch nicht gegeben haben, daher ist das zu verzeihen. Ich meine in meinem K&R (erschienen 1977, deutsche Übersetzung von 1983 (will jemand günstig eine englische Originalausgabe loswerden? ) stünde die for-Schleife auch so, wie sie später in C89 und C99 in den Standard gegossen wurde, also mit der Bearbeitung des dritten Arguments nach allem anderen.

Zitat von Muetze1:
Und das in dem Beispiel i in der Schleife deklariert wurde kommt nur daher, dass ich es heutzutage so schreibe, daher nicht wundern.
Ich weiß, ich auch C89 hat sowas nur nicht mitgemacht. In C99 hat das Deklarieren von i im Schleifenkopf und das Deklarieren vor dem Schleifenkopf übrigens unterschiedliche Bedeutungen. Deklariert man's im Schleifenkopf, ist der Scope der Variable auch nur die Schleife selbst, danach ist die Variable (bei vollständiger Implementierung von C99, was kaum ein Compiler machen dürfte) nicht mehr zugänglich (zufällig im C99 gefunden, was ein Stöbern im Standard doch so alles an Interessanten Informationen bringt, die man sonst aus den Compiler-Fehlern herausinterpretieren müsste... ).
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#10

Re: (Erledigt)[C++] "*cook++"?/des Verschlüsselung

  Alt 10. Feb 2006, 06:37
Danke danke ... und wie versprochen gibts hier die fertige Unit. Sie is dazu gedacht um das VNC-Passwort zu ver-/entschlüsseln.
Angehängte Dateien
Dateityp: pas d3des_168.pas (15,6 KB, 77x aufgerufen)
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz