|
@@ -0,0 +1,26 @@
|
|
|
+# C Primer Plus
|
|
|
+## 转换说明
|
|
|
+### printf 格式化原理
|
|
|
+
|
|
|
+示例代码
|
|
|
+
|
|
|
+```c
|
|
|
+float n1; /* 作为double类型传递 */
|
|
|
+double n2;
|
|
|
+long n3, n4;
|
|
|
+...
|
|
|
+printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);
|
|
|
+```
|
|
|
+
|
|
|
+1. 在调用 printf 时 程序将传入的值放入 [栈]
|
|
|
+2. 不同的类型的值分配不同的 内存
|
|
|
+> `float` 将会被转换为 `double` 类型, 所以占据八个字节
|
|
|
+
|
|
|
+内存空间表示,单位字节
|
|
|
+| 0 - 7 | 8 - 15 | 16 - 19 | 19 - 23|
|
|
|
+| --- | --- | --- | --- |
|
|
|
+| n1 | n2 | n3 | n4 |
|
|
|
+3. printf 函数开始根据 [转换说明] 从 [栈] 中读取对应的值
|
|
|
+`%ld`说明应该读取 4字节
|
|
|
+但是 n1 所占空间为 8字节,所以只能读取 n1 的前半部分
|
|
|
+四个`%ld`只能读取16字节, 所以 n3 与 n4 是无法被读取的
|