1.
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;
printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);
打印结果
0 107426611201074266112
n1前半4字节 n1后半4字节n2前半4字节n2后半4字节
该调用告诉计算机把变量n1,n2,n3,n4的值传递给计算机,家u树年纪把它们放置到堆栈(stack),计算机根据变量类型而非转换符把值依次放入堆栈中。所以,n1在堆栈中占用8个字节(float被转换成了double)。n2占用了8个字节,而n3和n4分别占用4个字节.
然后控制转移到printf()函数。该函数根据转换说明符一个个读取变量。
第一个%ld指出应该读取4个字节,他读取了n1的前半部分,被解释成一个长整数 .
第二个%ld指出应该读取4个字节,他读取了n1的后半部分,被解释成一个长整数 .
第三个%ld指出应该读取4个字节,他读取了n2的后半部分,被解释成一个长整数 .
第四个%ld指出应该读取4个字节,他读取了n2的后半部分,被解释成一个长整数 .
所以n3和n4的说明符都正确,但是打印结果仍然读取了错误的字节
2. printf是有返回值的,如果输出正确,它返回所打印的字符数目。如果有输出错误,那么会返回一个负数
3. printf代码中分行打印的几种方法
char name[40] = "Morgan";
printf("abc%s\n",
name);
printf("ab \
c\n");
printf("ab"
"c");
打印结果
abcMorgan
ab c 使用'\'换行
abc 多个""