C/C++知识点分享(14)

作者: 307656af5a04 | 来源:发表于2019-07-10 06:28 被阅读52次

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

    相关文章

      网友评论

        本文标题:C/C++知识点分享(14)

        本文链接:https://www.haomeiwen.com/subject/qcnqkctx.html