关于参数传递
以下是c primer plus 5th 中的一个例子
#include <stdio.h>
int main(void)
{
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;
printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);
return 0;
}
输出结果:0 1074266112 0 1074266112
书上给出的分析是“printf()在堆栈中读取前4个字节作为它的第一个值。这就是n1的前半部分,下一个%ld读取n1的后半部分..”
而书上的另一个例子如下
#include <stdio.h>
#define PAGES 336
#define WORDS 65618
int main(void)
{
short num = PAGES;
short mnum = -PAGES;
printf("WORDS as int, short, and char: %d %hd %c\n", WORDS, WORDS, WORDS);
return 0;
}
输出结果:WORDS as int, short, and char: 65618 82 R
书上说“系统将65618存储为4字节的整数...”
对于值“82”书上解释说“当我们用%hd打印WORDS时,printf()只是用最后两个字节”
不解的是,printf()为什么一会取“前”一会取“后”?
谁能帮忙解释下!