ฉันสังเกตเห็นสิ่งที่แปลกหลังจากรวบรวมรหัสนี้ในเครื่องของฉัน:
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
int a,b,c,d;
int e,f,g;
long int h;
printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x",
&a,&b,&c,&d,&e,&f,&g,&h);
return 0;
}
ผลที่ได้คือ โปรดสังเกตว่าระหว่างทุก int แอดเดรสจะมีความแตกต่าง 4 ไบต์ อย่างไรก็ตามระหว่าง int สุดท้ายและ int ยาวมีความแตกต่าง 12 ไบต์:
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeof
ฟังก์ชั่นสำหรับสิ่งนั้น printf("size: %d ", sizeof(long));
%x
เท่านั้น โชคดีสำหรับคุณมันทำงานได้อย่างถูกต้องบนแพลตฟอร์มของคุณเพื่อส่งตัวชี้ที่มีสตริงรูปแบบที่คาดหวังunsigned int
แต่พอยน์เตอร์และ ints มีขนาดแตกต่างกันใน ABIs จำนวนมาก ใช้%p
เพื่อพิมพ์พอยน์เตอร์ในรหัสพกพา (มันเป็นเรื่องง่ายที่จะจินตนาการถึงระบบที่รหัสของคุณจะพิมพ์บน / ครึ่งล่างของ 4 ตัวชี้เป็นครั้งแรกแทนการครึ่งล่างของทั้งหมด 8)
%zu
@yoyo_fun การพิมพ์ที่อยู่การใช้งาน %p
การใช้ตัวระบุรูปแบบที่ไม่ถูกต้องจะเรียกใช้พฤติกรรมที่ไม่ได้กำหนด
int
หลังจากh
ในซอร์สโค้ดh
คอมไพเลอร์อาจจะนำมาใส่ในช่องว่างก่อน