printf(s) 僅輸出字串安全;printf(s, 1,2,3) 多餘參數被忽略,不報錯。說明 printf 只解析格式字串中出現的佔位符數量。
int a[10];
printf("%p %p", &a[0]+1, &a[1]); // 輸出相同
結論: 指針 +1 並非地址值 +1,而是 + sizeof(指針指向類型)。int* +1 實際增加 4 字節(32 位)。
printf("%d", (int*)0x04 - (int*)0x00); // 輸出 1
兩地址差為 4 字節,但指針減法按元素個數計算,故結果為 1。再次證明指針運算以 sizeof(T) 為單位。
int *p = &char_var; 會觸發編譯警告/錯誤,因取址運算保留原類型信息,指針類型嚴格匹配。