C/C++知识点分享(14)
2019-07-10 本文已影响52人
307656af5a04
1. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c; c = a+++b;
解析:这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。
根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
c = a++ + b;
因此, 这段代码持行后a = 6, b = 7, c = 12。
如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:
这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题
2.请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char a[30];
char *b = (char *)malloc(20 * sizeof(char));
printf("%d\n", sizeof(a));//1
printf("%d\n", sizeof(b));//2
printf("%d\n", sizeof(a[3]));//3
printf("%d\n", sizeof(b+3));//4
printf("%d\n", sizeof(*(b+4)));//5
return 0 ;
}
3. 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
解析:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和
函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。
C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。