你可能从没见过的C语言冷知识

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

奇怪的零

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

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

  正确答案是:第一个输出false,第二个输出true

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

反斜杠\

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

    printf("Hello \
    World!");
C

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

    printf("Hello \World!");
C

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

另类数组写法

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

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

  依然可以输出数组下标为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;
%>
C

字符串拼接

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

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

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

忽略参数的处理

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

void func(int n, int m) {
    (void)m; // 忽略参数m
    printf("%d\n", n);
}
C
打赏
评论区
头像
  • 高兴
  • 小怒
  • 脸红
  • 内伤
  • 装大款
  • 赞一个
  • 害羞
  • 汗
  • 吐血倒地
  • 深思
  • 不高兴
  • 无语
  • 亲亲
  • 口水
  • 尴尬
  • 中指
  • 想一想
  • 哭泣
  • 便便
  • 献花
  • 皱眉
  • 傻笑
  • 狂汗
  • 吐
  • 喷水
  • 看不见
  • 鼓掌
  • 阴暗
  • 长草
  • 献黄瓜
  • 邪恶
  • 期待
  • 得意
  • 吐舌
  • 喷血
  • 无所谓
  • 观察
  • 暗地观察
  • 肿包
  • 中枪
  • 大囧
  • 呲牙
  • 抠鼻
  • 不说话
  • 咽气
  • 欢呼
  • 锁眉
  • 蜡烛
  • 坐等
  • 击掌
  • 惊喜
  • 喜极而泣
  • 抽烟
  • 不出所料
  • 愤怒
  • 无奈
  • 黑线
  • 投降
  • 看热闹
  • 扇耳光
  • 小眼睛
  • 中刀
  • 呵呵
  • 哈哈
  • 吐舌
  • 太开心
  • 笑眼
  • 花心
  • 小乖
  • 乖
  • 捂嘴笑
  • 滑稽
  • 你懂的
  • 不高兴
  • 怒
  • 汗
  • 黑线
  • 泪
  • 真棒
  • 喷
  • 惊哭
  • 阴险
  • 鄙视
  • 酷
  • 啊
  • 狂汗
  • what
  • 疑问
  • 酸爽
  • 呀咩爹
  • 委屈
  • 惊讶
  • 睡觉
  • 笑尿
  • 挖鼻
  • 吐
  • 犀利
  • 小红脸
  • 懒得理
  • 勉强
  • 爱心
  • 心碎
  • 玫瑰
  • 礼物
  • 彩虹
  • 太阳
  • 星星月亮
  • 钱币
  • 茶杯
  • 蛋糕
  • 大拇指
  • 胜利
  • haha
  • OK
  • 沙发
  • 手纸
  • 香蕉
  • 便便
  • 药丸
  • 红领巾
  • 蜡烛
  • 音乐
  • 灯泡
  • 开心
  • 钱
  • 咦
  • 呼
  • 冷
  • 生气
  • 弱
  • 阿鲁
  • 泡泡
    头像

    数组另类写法那个是因为 a[x] 实际上是 *(a+x) 的语法糖。C 语言里将一个变量转为 void 类型表示弃置该值。

    头像
    CJHONG
      

    好怀念的#include哈哈,DNA动了。

    头像
    irils
      

    所以都快毕业了,还没加友链

    头像
    Vay
      

    虽然但是,“奇怪的零”那里%d不应该分别输出0和1嘛

      头像
      Veen Zhao
        
      @Vay

      C里没bool量,看懂即可

        头像
        @Veen Zhao

        C99 开始 C 语言有正式的 bool 类型,关键字为 _Bool。自 C23 起,bool 也作为布尔类型的关键字,true 和 false 成为 C 语言关键字,并且布尔类型不再由整数定义,而是由 true 和 false 两个常量定义。

          头像
          Veen Zhao
            
          @Coelacanthus

          大佬所言极是