Was ist der richtige Weg, um einen Zeiger zu versetzen?

8

Ich möchte einen Zeiger auf eine Funktion übergeben. Ich möchte, dass dieser Zeiger auf eine Stelle in der Mitte eines Arrays zeigt. Angenommen, ich habe ein Array wie zB unsigned char BufferData[5000]; , wäre die folgende Aussage syntaktisch korrekt?

%Vor%     
PICyourBrain 06.10.2010, 13:05
quelle

7 Antworten

16

Das würde tun, aber mach es einfach:

%Vor%

(Es hört sich so an, als würde writeSECTOR eigentlich ein unsigniertes char * nehmen)

    
nos 06.10.2010, 13:08
quelle
6

Du kannst einfach BufferData + i * 512 machen. Ein arithmetischer Operator + für char * liefert ein char *, wenn Sie ihm einen ganzzahligen Wert hinzufügen.

    
reko_t 06.10.2010 13:09
quelle
5

Zeigerarithmetik ist ziemlich einfach zu verstehen. Wenn Sie einen Zeiger auf das erste Element eines Arrays haben, zeigt p + 1 auf das zweite Element und so weiter, unabhängig von der Größe jedes Elements. Selbst wenn Sie also ein Array von Ints oder eine beliebige MyData-Struktur hätten, wäre es wahr.

%Vor%

Wenn Ihr Array unsigned char ist, dann fügen Sie einfach so viele Bytes Offset, die Sie in das Array gehen möchten, z. B.

%Vor%

Alternativ, wenn die Notation verwirrend ist, können Sie sich immer darauf beziehen, wie es in den obigen Kommentaren gezeigt ist, z. &data[512]

    
locka 06.10.2010 13:14
quelle
3

Das sollte funktionieren. In C erhöht das Hinzufügen einer Ganzzahl zu einem Zeiger den Zeiger um die Ganzzahl multipliziert mit dem Wert sizeof , auf den der Zeiger zeigt.

    
Nathan Fellman 06.10.2010 13:08
quelle
0

sieht gut aus, aber probiere es im Compiler aus,

Sie können writeSECTOR (destAddress, & amp; BufferData [i * 512]);

    
Jose 06.10.2010 13:10
quelle
0

Es sieht so aus, als würde es die Adresse des i * 512-ten Elements des Arrays übergeben. Ist es das, was Sie tun wollen?

Ich sehe nicht wirklich, was diese Besetzung für int dich kauft.

    
T.E.D. 06.10.2010 13:11
quelle
0

Das sollte so funktionieren, wie du denkst. Zeiger in C ist nur eine Adresse im RAM, so dass Sie den Zeiger in Ihrem Maß treiben können.

    
shenju 06.10.2010 13:43
quelle

Tags und Links