|
|
|
|
Näh. Betrachte mal den Ausdruck board[2][1] , wobei board ein 5x5-Array sei:
- Wenns als int** board deklariert ist:
Ich dereferenziere board, springe da zu Offset 2, und finde einen Ausdruck vom Typ int*. Den dereferenziere ich nochmal, und gucke mir da den Offset 1 an. Insgesamt habe ich also zweimal dereferenziert.
- Wenns als int board[5][5] deklariert ist:
Ich dereferenziere board, und finde da einen 25 ints großen, zusammenhängenden Speicherbereich vor. Dann bastele ich mir aus 2*5 + 1 meinen Offset in diesen Speicherbereich zusammen und gucke mir diesen Offset an. Insgesamt habe ich einmal dereferenziert und einmal ein bisschen Arrayarithmetik betrieben.
|
|
|
|
|
|
|
Vielleicht statt
printf("%d|", board[i][j]);
sowas
printf("%d|", *(*(board + i) + j));
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von FIash am 06.08.2009 0:27]
|
|
|
|
|
|
Ja, im Prinzip heißts halt int* statt int** übergeben und Offset selbst errechnen:
int board[5][5] = {
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
};
int *p = &board[0][0];
assert( board[2][1] * p[2*5 + 1] == 4 );
Jedenfalls in normalem C. Will da jetzt nicht ausschließen, dass C99 noch irgendeine Extrawurst brät.
|
|
|
|
|
|
|
| Zitat von igor]2
Näh. Betrachte mal den Ausdruck board[2][1] , wobei board ein 5x5-Array sei:
- Wenns als int** board deklariert ist:
Ich dereferenziere board, springe da zu Offset 2, und finde einen Ausdruck vom Typ int*. Den dereferenziere ich nochmal, und gucke mir da den Offset 1 an. Insgesamt habe ich also zweimal dereferenziert.
- Wenns als int board[5][5] deklariert ist:
Ich dereferenziere board, und finde da einen 25 ints großen, zusammenhängenden Speicherbereich vor. Dann bastele ich mir aus 2*5 + 1 meinen Offset in diesen Speicherbereich zusammen und gucke mir diesen Offset an. Insgesamt habe ich einmal dereferenziert und einmal ein bisschen Arrayarithmetik betrieben.
| |
Achja...stimmt...langsam wird da wieder was hell. int array[][] legt ja alles am Stück ab...während wenn ich mir mit int** array mein Array selbst aus zeigern auf speicherbereiche zusammenbastel.
C ist halt doch einfach ziemlich rudimentär
|
|
|
|
|
|
|
| Zitat von igor]2
Ja, im Prinzip heißts halt int* statt int** übergeben und Offset selbst errechnen:
int board[5][5] = {
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
};
int *p = &board[0][0];
assert( board[2][1] * p[2*5 + 1] == 4 );
Jedenfalls in normalem C. Will da jetzt nicht ausschließen, dass C99 noch irgendeine Extrawurst brät.
| |
Das mit dem C99 hab ich mittlerweile abgestellt. Den kleinen Luxus for(int i = 0;...) schreiben zu können, kommt mir mit zu vielen Sideeffects daher ![Breites Grinsen](img/smilies/biggrin.gif)
Jetzt kapier ich nur noch nicht ganz, wie ich das mit dem Übergabeparamtern backe...
|
Code: |
#include <stdio.h>
#include <stdlib.h>
void printBoard(int *board, int width, int height) {
printf("printBoard()\n");
int i, j = 0;
for(i = 0; i < width; i++) {
for(j = 0; j < height; j++) {
printf("%d|", *(board + i*height + j));
}
printf("\n");
}
}
int main(int argc, char** argv) {
int i, j = 0;
int width = 5;
int height = 5;
int board[width][height];
for(i = 0; i < width; i++) {
for(j = 0; j < height; j++) {
board[i][j] = rand()%10;
}
}
board[0][0] = 0;
printBoard(board, width, height);
return 1;
}
|
|
Es funktioniert zwar, bekomme aber nach wie vor die warning test.c:29: warning: passing argument 1 of ‘printBoard’ from incompatible pointer type"
|
|
|
|
|
|
|
Will wohl statt
printBoard(board, width, height);
ein
printBoard(&board[0][0], width, height);
haben. Im übrigen sollte das hier:
int width = 5;
int height = 5;
int board[width][height];
unter nicht-C99 eigentlich gar nicht klappen, da width und height nicht const int sind.
|
|
|
|
|
|
|
Jo, &board[0][0] frisst er.
Und warum er das andere schluckt, keine Ahnung, tut er jedenfalls ![Breites Grinsen](img/smilies/biggrin.gif)
Das geht - zu meiner Überraschung - sogar mit rand() werten ![Breites Grinsen](img/smilies/biggrin.gif)
|
Code: |
#include <stdio.h>
#include <stdlib.h>
void printBoard(int *board, int width, int height) {
printf("printBoard()\n");
int i, j = 0;
for(i = 0; i < width; i++) {
for(j = 0; j < height; j++) {
printf("%d|", *(board + i*height + j));
}
printf("\n");
}
}
int main(int argc, char** argv) {
int i, j = 0;
int width = rand() % 10 + 1;
int height = rand() % 10 + 1;
int board[width][height];
for(i = 0; i < width; i++) {
for(j = 0; j < height; j++) {
board[i][j] = rand()%5;
}
}
board[0][0] = 0;
printBoard(&board[0][0], width, height);
return 1;
}
|
|
|
|
|
|
|
|
|
Ah cool, WIndows 7 Release morgen nicht nur fpr Technet und MSDN.
Auch MSDNAA \o/
|
|
|
|
|
|
|
Strange. Davon ab, prüf mal ob die Indexermittlung in printBoard korrekt ist. Eventuell müsste das *(board + i*width + j) sein, nicht height.
|
|
|
|
|
|
|
Jungs, kuckt euch Zack and Miri make a porno an. Ein echter Kevin Smith Film, flach, pervers, unter jedem Niveu aber genau auf meinem. Ich hab mich eben in der Sneak einfach nur kaputt gelacht!
|
|
|
|
|
|
|
Sneak? Dann hab ich wohl vor einem Viertel Jahr den Leak gesehen ![mit den Augen rollend](./img/smilies/icon18.gif)
Egal, ich wollte mich nur kurz mitteilen dass der Zoom H2 ein echt pornoeser Taschenneger ist
|
|
|
|
|
|
|
Ist wohl schon 2008 in den USA gestartet. Hätte mir ja mal jemand bescheid sagen können das es einen neuen Kevin Smith Film gibt.
|
|
|
|
|
|
|
Authentifizierung mit Kohana gegen eine Legacy-Datenbank fickt seit 1 1/2 Tagen mein Gehirn. ![](img/smilies/icon8.gif)
Gleich schreib ich den scheiss einfach selbst. Wobei ich schon gerne die wirklich schicke integrierte Auth-Lösung verwenden würde.
|
|
|
|
|
|
|
Ich hab ihn letztes Jahr afaik gesehen. War ziemlich lustig
|
|
|
|
|
|
|
So, ich habe jetzt einen eigenen Kundenberater bei der T-Com der sich höchstpersönlich um das Problem kümmern will
|
|
|
|
|
|
|
Das erzähl ich den Leuten auch immer wenn ich ein Ticket anlege.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wie wahr, wie wahr.
|
|
|
|
|
|
|
|
|
|
|
![](http://4.bp.blogspot.com/_IUYlNU10BMY/Snqe2WMieLI/AAAAAAAAfP8/SA3d5I6TBpc/s400/My-first-failure-40.jpg)
Das is geil
|
|
|
|
|
|
|
|
|
|
|
Frage zum Public Key Verfahren (RSA). Hab mich bisher immer nur mit den mathematischen Hintergründen der Kryptografie befasst.
Der wesentliche Vorteil soll ja sein, dass der private Schlüssel nicht gesendet wird.
Aber irgendwie muss er ja dem Empfänger des Cyphertextes gegeben werden. Schließlich hat der, der den Plaintext verschlüsselt zunächsteinmal den Privaten Schlüssel.
Wie geschieht das?
|
|
|
|
|
|
|
Situation: A will B eine Nachricht AB zukommen lassen und B antwortet darauf mit der Nachricht BA.
A verschlüsselt AB mit dem öffentlichen Schlüssel von B zu AB' und überträgt dies zu B. B kann AB' jetzt mit seinem privaten Schlüssel entschlüsseln und hat jetzt wieder AB.
B verfasst eine Antwort BA und verschlüsselt sie mit dem öffentlichen Schlüssel von A zu BA'. Die wird zu A übertragen der sie wiederum mit seinem privaten Schlüssel zu BA entschlüsseln kann.
--
Wenn der private Schlüssel übertragen werden müsste, wäre er ja nicht mehr privat.
|
|
|
|
|
|
|
|
|
|
|
| Zitat von TriggerTG
Der wesentliche Vorteil soll ja sein, dass der private Schlüssel nicht gesendet wird. | |
ja
|
Aber irgendwie muss er ja dem Empfänger des Cyphertextes gegeben werden.
| |
nein
|
Schließlich hat der, der den Plaintext verschlüsselt zunächsteinmal den Privaten Schlüssel.
| |
nein
|
|
|
|
|
|
|
| Zitat von Achsel-des-Bösen
Situation: A will B eine Nachricht AB zukommen lassen und B antwortet darauf mit der Nachricht BA.
A verschlüsselt AB mit dem öffentlichen Schlüssel von B zu AB' und überträgt dies zu B. B kann AB' jetzt mit seinem privaten Schlüssel entschlüsseln und hat jetzt wieder AB.
B verfasst eine Antwort BA und verschlüsselt sie mit dem öffentlichen Schlüssel von A zu BA'. Die wird zu A übertragen der sie wiederum mit seinem privaten Schlüssel zu BA entschlüsseln kann.
--
Wenn der private Schlüssel übertragen werden müsste, wäre er ja nicht mehr privat.
| |
Ahh klick, hatte da nen fundamentalen Denkfehler. Danke
|
|
|
|
|
|
|
| Zitat von Ashtray
Dipl.-Ing \o/
| |
grats
|
|
|
|
|
|
|
| Zitat von TriggerTG
Ahh klick, hatte da nen fundamentalen Denkfehler. Danke
| |
Nächste Frage die du dir stellen kannst: Wie überträgt man einen symmetrischen Schlüssel (zum späteren Verschlüsseln der kommunikation) über eine unsicheres Medium, wenn es keine anderen Kommunikationswege als dieses Medium gibt und die Parteien vorher noch keinen Kontakt hatten.
|
|
|
|
|
|
|
Existiert eine Glasfaser-Verbindung die für Quantenmechanische Effekte genutzt werden kann?
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |