生活💿抒写情怀🍸诗与诗

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”来解决这个问题。

上一篇 下一篇

猜你喜欢

热点阅读