代码改变世界

错题集

2019-05-21 13:52  Maoey  阅读(256)  评论(1)    收藏  举报

解析:在一开始p指向了a的首地址而后在自定义函数中又将p指向了b也就说不改变a中的信息所以还是“ABCDE”

解析:输入tt 12 345 678后aegv[i]={tt,12,345,678};argc=4;**argv指向的是数组的首字符*arqv则指向这些字符的首字母取 1 3 6所以说9163.

2.(1)读a 3.(1)读a 1.(1)读a
(1)+1 (1)+1 (2)读a
(2)读a (2)读a (1)+1
(1)写入a=2 (1)写入a=2 (2)+1
(2)+1 (2) +1 (1)写入a=3
(2)写入a=3 (2)写入a=3 (2)写入a=3
(1)输出a=2 (2)输出a=3 (1)输出a=3
(2)输出a=3 (1)输出a=2 (2)输出a=3
链接:https://www.nowcoder.com/questionTerminal/0f154664563d41dc82a53e138a3eac5f
来源:牛客网

不知道朋友们有没有学过X86汇编,是这样的,你看a=a+1这一条语句,看起来是一条语句,实际上这条语句会被编译成大概3条指令的。
首先是先计算出a+1的值,那么就是:
mov al,a (把a的值赋给寄存器al)
add al,1 (寄存器al的值加1)

计算完a+1的值后,会再进行赋值,对应的指令是 :
mov a,al(把寄存器al里的值赋给变量a)
大概就是这样的一个过程,3条指令。

你想既然这样,第1个进程可能是执行到 刚好计算完a+1的值,还没给变量a赋值(这时al里保存的是2,a依然是1),CPU就转换到执行第2个进程了,第2个进程完成这3条指令后,a的值为2,输出2,然后又回到第1个进程,这时开始执行mov a,al(把寄存器al里的值2赋给2),所以a的值为2,也输出2。

希望你们能看到我的观点,如果看不懂的话也没关系,简单地说就是:a=a+1这一句实际上执行是由很多条指令组成的。

1.&&,||是逻辑或和与
2.&,|,~是位或,位与,位去反

%3d只取前三位,后面归float所有但有。所以截断


链接:https://www.nowcoder.com/questionTerminal/e9a82a9685d74dc3bcaaad9b3978ab1f
来源:牛客网

(1)答:防止头文件被重复引用 (加深:链接:https://www.nowcoder.com/questionTerminal/e9a82a9685d74dc3bcaaad9b3978ab1f
来源:牛客网

防止头文件被重复引用是什么意思呢?
其实头文件被重复引用是指一个头文件在同一个cpp源文件中被多次引用,这种错误通常是由于include嵌套使用造成的,
比如:头文件a.h中包含了#include b.h文件,而源文件c.cpp同时包含了#include a.h与#include b.h,此时就会造成b.h
重复引用。
那么头文件重复引用会出现什么问题呢?
有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是降低了编译效率,但是对于要求比较
高的工程来说这无疑是致命的。
但有些头文件重复引用包含就会引起错误,比如在头文件中定义了全局变量(在C中确实是允许的,虽然不被推荐)这种
会被引起重定义。
那么是不是所有的头文件都需要ifndef/define/endif呢?
并不是的,用ifndeXXX #define XXX #endif 或者其他方式避免头文件重复包含,只有好处没有坏处,这是一个很好的习惯。)
(2)答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3)答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
(4)答:实型