?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
在頭文件<stddef.h>中定義 | ||
---|---|---|
typedef / *實(shí)現(xiàn)定義* / ptrdiff_t; |
ptrdiff_t
是減去兩個(gè)指針的結(jié)果的帶符號(hào)整數(shù)類型。
如果可能有負(fù)值,則ptrdiff_t用于指針?biāo)阈g(shù)和數(shù)組索引。 使用其他類型的程序(如int)可能會(huì)失敗,例如, 64位系統(tǒng),當(dāng)索引超過INT_MAX時(shí),或者它依賴于32位模塊化運(yùn)算。
只有指向同一數(shù)組元素的指針(包括指向數(shù)組末尾的指針)才可以相互減去。
如果一個(gè)數(shù)組非常大(大于PTRDIFF_MAX個(gè)元素,但小于SIZE_MAX個(gè)字節(jié)),兩個(gè)指針之間的差別可能不能表示為ptrdiff_t,那么減去兩個(gè)這樣的指針的結(jié)果是未定義的。
對(duì)于短于PTRDIFF_MAX的char數(shù)組,ptrdiff_t作為size_t的有符號(hào)對(duì)應(yīng)部分:它可以存儲(chǔ)任何類型數(shù)組的大小,并且在大多數(shù)平臺(tái)上與intptr_t同義)。
#include <stdio.h>#include <stddef.h>#include <stdint.h> int main(void){ const size_t N = 100; int numbers[N]; printf("PTRDIFF_MAX = %ld\n", PTRDIFF_MAX); int *p1=&numbers[18], *p2=&numbers[23]; ptrdiff_t diff = p2-p1; printf("p2-p1 = %td\n", diff); return 0;}
可能的輸出:
PTRDIFF_MAX = 9223372036854775807p2-p1 = 5
size_t | 由sizeof運(yùn)算符返回的無(wú)符號(hào)整數(shù)類型(typedef) |
---|---|
offsetof | 從結(jié)構(gòu)類型開始到指定成員(函數(shù)宏)的字節(jié)偏移量 |
| 針對(duì)ptrdiff_t 的C ++文檔 |