本文搜集了一些有趣的 C++的题目,有些题目令人大跌眼镜。来看看!

请问输出结果是什么?如何解释??

#include <iostream>

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23, 34, 12, 17, 204, 99, 16};

int main() {
    for (int d = -1; d <= (TOTAL_ELEMENTS - 2); d++)
        std::cout << array[d + 1] << std::endl;
    return 0;
}
查看提示

请问输出结果是什么?如何解释??

#include <iostream>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)

int main()
{
    std::cout << h(f(1,2)) << std::endl;
    std::cout << g(f(1,2)) << std::endl;
    return 0;
}
查看提示

程序会输出None吗?

#include <iostream>

int main() {
    int a = 3;
    switch (a) {
        case 1:
            std::cout << "ONE";
            break;
        case 2:
            std::cout << "TWO";
            break;
        defalut:
            std::cout << "NONE";
    }
    return 0;
}
查看提示

它们相等吗?

#include <stdio.h>

int main() {
    double f = 0.0;
    int i;

    for (i = 0; i < 10; i++)
        f = f + 0.1;

    if (f == 1.0)
        printf("f is 1.0\n");
    else
        printf("f is NOT 1.0\n");

    return 0;
}
查看提示

逗号表达式可以正确赋值吗?

#include <iostream>

int main() {
    int a = 1, 2;
    std::cout << "a : " << a;
    return 0;
}
查看提示

输出结果是什么?

#include <iostream>

#define SIZE 10

void size(int arr[SIZE]) {
    std::cout << "size of array is:" << sizeof(arr);
}

int main() {
    int arr[SIZE];
    size(arr);
    return 0;
}
查看提示

为什么会产生编译错误?

记住,将一个普通指针传递给 const 类型的指针是允许的。

void foo(const char **p) {}

int main(int argc, char **argv) {
    foo(argv);
    return 0;
}
查看提示

输出是什么?

#include <stdio.h>
#include <stdlib.h>

#define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))

#define PrintInt(expr) printf("%s:%d\n",#expr,(expr))

int main() {
    /* The powers of 10 */
    int pot[] = {
            0001,
            0010,
            0100,
            1000
    };
    int i;

    for (i = 0; i < SIZEOF(pot); i++)
        PrintInt(pot[i]);
    return 0;
}
查看提示

输出是什么?肯定不是 10

#include <stdio.h>
#include <stdlib.h>

#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))

int main() {
    int y = 100;
    int *p;
    p = (int*)malloc(sizeof(int));
    *p = 10;
    y = y/*p; /*dividing y by *p */;
    PrintInt(y);
    return 0;
}
查看提示

如何实现乘 5?

#include <stdio.h>

#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))

int FiveTimes(int a) {
    int t;
    t = a << 2 + a;
    return t;
}

int main() {
    int a = 1, b = 2, c = 3;
    PrintInt(FiveTimes(a));
    PrintInt(FiveTimes(b));
    PrintInt(FiveTimes(c));
    return 0;
}
查看提示

这个程序哪里有问题?

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr1, ptr2;
    ptr1 = (int *) malloc(sizeof(int));
    ptr2 = ptr1;
    *ptr2 = 10;
    return 0;
}
查看提示

这个程序可以运行吗?

#include <stdio.h>

int main() {
    int a = 3, b = 5;

    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"], 1["this"],
           2["beauty"], 0["tool"], 0["is"], 3["sensitive"], 4["CCCCCC"]);
    return 0;
}
查看提示

offsetof的原理是什么?

#include <stdio.h>

#define offsetof(a, b) ((size_t)(&(((a*)(0))->b)))
struct test {
    int a;
    double b;
    float c;
    int d[20];
};

int main() {
    printf("%d\n", offsetof(test, a));
    printf("%d\n", offsetof(test, b));
    printf("%d\n", offsetof(test, c));
    printf("%d\n", offsetof(test, d));
}
查看提示

SWAP宏是如何工作的?

#include <iostream>

#define SWAP(a, b) ((a) ^= (b) ^= (a) ^= (b))

int main() {
    int a = 1;
    int b = 2;
    SWAP(a, b);
    std::cout << a << b;
}
查看提示