下列程序,输出结果?
#include <stdio.h> int main() { int i = 43; printf("%d\n",printf("%d",printf("%d",i))); return 0; }
原系列出处:Linux 下 C 语言的几道经典面试题
![]() | 1 waycool 2017-07-01 22:31:53 +08:00 ![]() 4321 |
![]() | 2 21grams 2017-07-01 23:04:11 +08:00 ![]() 有啥经典的 |
![]() | 3 ldbC5uTBj11yaeh5 2017-07-01 23:05:26 +08:00 来来来,自认 c/c++ 面霸们的试试这个 /t/370278#r_4451518 |
![]() | 4 darrenliuwei 2017-07-01 23:24:04 +08:00 @waycool 结果为什么会是 4321 啊? |
![]() | 5 darrenliuwei 2017-07-01 23:25:00 +08:00 @waycool 我运行了,结果确实是 4321,但是不明白为什么会是 4321 ? |
6 markx 2017-07-01 23:27:37 +08:00 @darrenliuwei 你查一查 printf 的返回值就明白了呀。 |
![]() | 8 k9982874 2017-07-01 23:28:14 +08:00 via iPad ![]() 有啥经典的?测试答题者熟不熟悉 printf 函数? low 的不行 |
![]() | 9 zonyitoo 2017-07-01 23:29:58 +08:00 man 一下 printf 不就知道了,这问题纯粹就是看你有没有认真读过 printf 的函数文档罢了 |
![]() | 10 feather12315 2017-07-01 23:31:23 +08:00 via Android @darrenliuwei 一个命令:gcc -S 换个字面的解释:AMD64 指令集,函数调用过程:第一、2 个参数,mov 到某个寄存器,rax 放系统调用号? 再 syscall。 printf 第一个参数就是那个"%d",第二个参数呢?:) |
![]() | 11 ldbC5uTBj11yaeh5 2017-07-01 23:32:02 +08:00 printf 比较经典面试题是 EMC 的某道校招题,和 fork 集合起来考察缓冲区的理解。比较不错。 至于楼主这道,小学生。 |
![]() | 12 CEBBCAT 2017-07-02 03:33:38 +08:00 via Android 这题,考察的是执行顺序与返回值? |
![]() | 13 20015jjw 2017-07-02 04:23:44 +08:00 via Android 给大佬们跪了... |
![]() | 14 misaka20038numbe 2017-07-02 06:39:09 +08:00 printf 返回值是 int,我看函数声明这样写 |
15 ogfa 2017-07-02 06:49:55 +08:00 ![]() 就从这种帖子就能看出来这里的都是些什么水平的货色 小学生真是高看它了 回你的贴都是对人的一种侮辱 |
![]() | 16 lechain 2017-07-02 08:43:32 +08:00 看这里 https://linux.die.net/man/3/printf 或者在自己的电脑上这样子 ``` cat /usr/include/stdio.h | grep printf extern int fprintf (FILE *__restrict __stream, extern int printf (const char *__restrict __format, ...); extern int sprintf (char *__restrict __s, ``` 看第三行, 有返回值的 |
![]() | 17 lechain 2017-07-02 08:45:34 +08:00 man 手册里面对返回值的说明具体是这句话 Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings). |
![]() | 18 Shura 2017-07-02 09:40:37 +08:00 via Android 还不如这样考,printf("%d\n",printf("%d",scanf("%d%d",&a,&b))); |
19 sergeant 2017-07-02 10:00:21 +08:00 别鄙视楼主了,至少我这个小学生学到了 |
![]() | 20 coderluan 2017-07-02 10:26:19 +08:00 如果用了现实中不会出现的写法,那么这道题就提到不什么经典。 |
![]() | 21 Yunhao 2017-07-02 10:58:13 +08:00 via iPhone ![]() 为什么有些人的回复总喜欢充满恶意 |
![]() | 22 baixiangcpp 2017-07-02 11:31:05 +08:00 看不出哪里经典了,挺无聊的题目 |
![]() | 23 hjc4869 2017-07-02 11:47:26 +08:00 via iPhone int x=100; printf("%d"); 32bit msvc cl -O0 编译 输出? |
24 LigeLaige 2017-07-02 12:17:14 +08:00 printf 簇函数 ( printf/sprintf/fprintf ) 返回打印的字符串的长度 printf "43" 返回长度 2, "2" 返回长度 1 (延伸:"1" 还是返回 1 ) 所以 console 里面看到的是 4321,可以分开看:先打印 43,然后打印 2,然后打印 1,如果在调一层,就还是 1 ( 43211 )。 |
![]() | 25 momocraft 2017-07-02 12:44:00 +08:00 第一次看错了, 以为是考参数计算顺序 (ub) 的 |
![]() | 26 shiji 2017-07-02 12:50:23 +08:00 via Android 这是在刷 seo 么,我记得今天在 segment fault 看见过一模一样的东西。 |
![]() | 27 21grams 2017-07-02 13:08:30 +08:00 回字有四种写法,你们都学到了吗? |
28 besto 2017-07-02 14:34:31 +08:00 我来出一道题吧,关于 printf 的。 #include <stdio.h> int main(){ int n = 0; printf("HELLO %d\n%n", n, &n); printf("%d\n", n); return 0; } |
![]() | 29 Vfeather 2017-07-02 22:25:37 +08:00 不是很理解。 |
30 jeffersonpig 2017-07-03 09:08:51 +08:00 写了几年 C/C++从来没用过 printf 的返回值…… |
![]() | 31 araraloren 2017-07-03 09:20:19 +08:00 @jigloo 不错 我还真不知道 sizeof('a') 在 c 和 c++ 里面竟然不一样。。 |