[英]I don't understand some old C array concatenation
我在這個舊的C
程序中不理解這種語法,並沒有設置為測試代碼以查看它的作用。 我困惑的部分是數組的連接。 我不認為C可以像這樣處理自動類型轉換,或者我在周五下午讓我覺得太難了......
char wrkbuf[1024];
int r;
//Some other code
//Below, Vrec is a 4 byte struct
memcpy( &Vrec, wrkbuf + r, 4 );
知道這會發生什么嗎? 當你連接或添加一個int時, wrkbuf
變成什么?
wrkbuf + r
與&wrkbuf[r]
基本上wrkbuf
在表達式中使用wrkbuf + 4
“衰變”成指向第一個元素的指針。 然后將r
添加到它,它將指針推進r
元素。 也就是說這里沒有連接,它正在做指針算術。
memcpy( &Vrec, wrkbuf + r, 4 );
從wrkbuf數組復制4個字節,從第r
個元素開始到Vrec
的內存空間
memcpy(&Vrec, wrkbuf + r, 4)
從wrkbuf
第r
個位置復制4個字節到Vrec
。 向數組中添加int時,會得到它的第r
個位置的內存地址,在本例中為&wrkbuf[r]
。
示例memcpy
C實現(如您所見,它與strcpy
非常相似):
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.