#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类型的整数,类似的,后面两个变量在进行读取的时候,就会出现错误的情况。
原文:https://www.cnblogs.com/ruigege0000/p/13562763.html