在以下代碼片段中,指針地址和值的引用類型爲size_t
。然而正如標題所說,最後的減法對我來說沒有意義。它的作用就好像它減去乘以8的數字而不是實際值,如int array
所示。爲什麼從一個地址中減去一個指針值會導致指針值的8倍差距?
#include <stdio.h>
#include <stdint.h>
int main()
{
int i[6] = {2, 0, 1, 0, 20, 24};
void *ptr = &i[2];
printf("%zu\n", ((size_t*)ptr));
printf("%zu\n", *((size_t*)ptr));
printf("%zu\n", ((size_t*)ptr) - *((size_t*)ptr));
}
什麼類型的說明符是'%zu'?給我的編譯器發出警告:'未知的格式轉換類型字符'z'。 – haccks
@haccks這是'size_t'的正確轉換說明符。 – 2013-09-23 16:29:37
@haccks'z'是整數格式的修飾符,指示整型參數的期望類型是'size_t'。恕我直言,這是不正確的使用在這裏。 (C11 7.21.6.1 7) – chux