#include<stdio.h> #define BLURB "Authentic imitation!" int D20_1_stringf(void) { printf("[%2s]\n", BLURB); printf("[%24s]\n", BLURB); printf("[%24.5s]\n", BLURB); printf("[%-24.5s]\n", BLURB); return 0; }
#include<stdio.h> #define PAGES 336 #define WORDS 65618 int D20_2_intconv(void) { short num = PAGES; short mnum = -PAGES; printf("num as short and unsigned short:%hd %hu\n", num, num); printf("-num as short and unsigned short:%hd %hu\n", mnum, mnum); printf("num as int and char:%d %c\n", num, num); printf("WORDS as int,short, and char: %d %hd %c\n", WORDS, WORDS, WORDS); return 0; }
#include<stdio.h> int D20_3_floatcnv(void) { float n1 = 3.0; double n2 = 3.0; long n3 = 2000000000; long n4 = 1234567890; printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4); printf("%ld %ld\n", n3, n4); printf("%ld %ld %ld %ld\n", n1, n2, n3, n4); return 0; }
參數傳遞:以上面程序的第三行爲例進行分析,程序把傳入的值放入一個稱爲棧的內存區域,計算機根據變量類型(不是根據轉換說明)把這些值放入棧中。所以,n1被存儲在棧中,佔8個字節(float類型被轉換爲了double類型),一樣n2也在棧中佔有8個字節,而n3和n4分別佔用4個字節。而後控制轉到printf()函數,該函數根據轉換說明(不是根據變量類型)從棧中讀取數據,%ld轉換說明表示讀取4個字節,因此printf()讀取棧中前4個字節做爲第一個值。這是n1的前半部分,將被解釋位一個long類型的整數,根據下一個%ld轉換說明,printf()會接着讀取4個字節,這是n1的後半部分,將被解釋位第二個long類型的整數,相似的,後面兩個變量在進行讀取的時候,就會出現錯誤的狀況。git