簡體   English   中英

偏移指針的正確方法是什么?

[英]What is the correct way to offset a pointer?

我想傳遞一個指向函數的指針。 我希望這個指針指向數組中間的某個位置。 假設我有一個類似unsigned char BufferData[5000];的數組unsigned char BufferData[5000]; ,以下陳述在語法上是否正確?

writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
// destAddress is of type unsigned long
// writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
// i is an int

那樣做,但只是做到了:

 writeSECTOR( destAddress, &BufferData[i * 512]);

(聽起來像writeSECTOR真的應該采取unsigned char *雖然)

你可以做BufferData + i * 512 char *上的算術+運算符在向其添加整數值時產生char *。

指針算術很容易理解。 如果你有一個指向數組第一個元素的指針,那么p + 1指向第二個元素,依此類推,無論每個元素的大小如何。 因此,即使你有一個int數組,或任意結構MyData,它也會成立。

MyData data[100];
MyData *p1 = data;;  // same as &data[0]
MyData *p2 = p1 + 1; // same as &data[1]
MyData *p3 = p2 + 1; // same as &data[2]
MyData *p4 = p2 - 1; // same as &data[0] again

如果你的數組是unsigned char,那么你只需要添加許多你想要進入數組的字節偏移量,例如

unsigned char data[16384];
unsigned char *offset = data + 512; // same as &data[512]
*offset = 5; // same as data[512] = 5;

或者,如果符號令人困惑,您可以隨時引用它,因為它在上面的注釋中顯示,例如&data[512]

這應該工作。 在C中,向指針添加整數會將指針增加整數乘以指針指向的類型的sizeof

它看起來不錯,但在編譯器上試試,

您可以使用writeSECTOR(destAddress,&BufferData [i * 512]);

看起來它會傳遞到數組i * 512'元素的地址。 那是你想要的嗎?

我真的沒有看到那個轉向int的東西是在買你。

這應該像你想象的那樣奏效。 C中的指針只是RAM中的一個地址,因此您可以在指針中漂移指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM