background
你可能从没见过的C语言冷知识
# 💻代码集萃

  以下都是我在备考过程中发现的一些C语言冷知识,可能会比较有趣或者怪异,分享给大家看一下,有些的确很冷 ::(狗头)。

奇怪的零

  看下面的代码,请问输出什么?这是我在今年计算机二级考试的时候碰到的一道类似的题。[DarkBText]别问我为啥都要毕业了才考二级C[/DarkBText]。

#include <stdio.h>
int main(){
    printf("%d\n", 0=='0');
    printf("%d", 0=='\0');
    return 0;
}

  正确答案是:[BlurText]第一个输出false,第二个输出true[/BlurText]。

  实际上,'0'表示的是字符0,对应的ASCII码是48,48对应的十六进制数就是0x30。而'\0'是转义字符,代表空字符,对应的ASCII码是0,0不管是几进制,都是0(十进制),也就是0x00(十六进制)。

反斜杠\

  当我们一行写不下一条C语言语句时,可以使用续行符 '\' 来续行。

    printf("Hello \
    World!");

  输出的结果为Hello World!。但是在一行的代码中使用它。如:

    printf("Hello \World!");

  这里会输出什么呢?要注意,输出结果中并没有'\'。也就是说,在C语言编译器里面,当使用单独的一个 '\' 时他就是一个续行符,哪怕这个续行是在一行也是一样。

另类数组写法

  C语言中是数组元素的引用的一般形式是:数组名[下标];比如Array[3]
  实际上也可以写成:下标[数组名] 。例如下面的代码。

#include <stdio.h>
int main(){
   int arr[10];
   arr[5] = 1;
   printf("%d",5[arr]);
}

  依然可以输出数组下标为5的元素。

[]和{}符号的替换

  说到这个就不得不提一嘴IBM的历史。早期 IBM 在计算机产业中的地位非常重要,但是它的键盘没有中括号和花括号按键,所以在C语言中可以使用其它的组合符号来替代,并且一直保留到现在。

  我们可以使用<::>来代替[],使用<%%>来替换{}。比如下面的代码可以正常编译并运行:

#include <stdio.h>
int main(void)
<%
    int arr<:5:> = {1, 2, 3, 4, 5};
    printf("%d\n", 2<:arr:>);
    return 0;
%>

字符串拼接

  将两个由" "包围的字符串放在一起,它们会自动拼接成一个字符串,请看下面的代码:

#include <stdio.h>
int main(void){
    printf("C" "C++" "Python");
}

  最终会打印:CC++Python,注意没有空格哦。

忽略参数的处理

  有时候不需要处理函数调用传进来的一些参数,但如果放置没有用的参数不管可能会引起编译警告甚至错误,这个时候就需要手动指定忽略参数的处理,可以看下面的例子:

void func(int n, int m) {
    (void)m; // 忽略参数m
    printf("%d\n", n);
}
评论 | 6 条
💖💔💯💢👌👍💪🤝🙏🧧🧨🎉👣😄😁😆🤣😂🙂🙃😍😘😋🤪🤭🤫🤔🤨😑😶😏🤕🤧😵🥳😎😕😟😯😳🥺😥😭😱😖😣😫🥱😡