写点什么

几个有趣的 C/C++ 语言『冷知识』

  • 2024-02-26
    福建
  • 本文字数:1932 字

    阅读完需:约 6 分钟

几个有趣的C/C++语言『冷知识』

当涉及到 C/C++语言时,有一些冷知识可能并不为人所熟知,但却可以让你更深入地理解这门古老而强大的编程语言。以下是一些有趣的 C/C++语言冷知识。


1. 数组的下标可以是负数在我们日常的 C 语言编程中,数组是一个非常常见的数据结构。我们习惯性地使用正整数作为数组的下标,从 0 开始递增。但你可曾想过,C 语言对数组的下标并没有这么苛刻的限制?实际上,C 语言允许数组的下标可以是负数。

这意味着,你可以通过使用负数的下标,轻松地访问数组的尾部元素,而无需手动计算数组长度。这样的设计在某些情况下会让代码更加简洁、灵活。当然,使用负数下标时要确保不越界,以免引发不可预知的错误。

int main() {    int arr[5] = {1, 2, 3, 4, 5};     // 使用负数下标访问数组    printf("倒数第二个元素:%d\n", arr[-2]);     return 0;}
复制代码


这段代码中,我们成功地通过负数下标访问了数组的倒数第二个元素,展现了 C 语言中数组下标的灵活性。

2. 数组名可以放在括号中通常我们在使用数组时,会通过数组名直接访问数组元素,比如 arr[0]。然而,你或许不知道,C 语言中数组名本身也可以放在括号中,产生与数组名相同效果。

这种特性虽然看似不起眼,但实际上为我们提供了一种更加灵活的操作方式,特别在函数传参时尤为方便。通过将数组名放在括号中,可以避免数组退化为指针,保留数组的信息,使得函数能够更好地理解传入的是一个数组。

#include <stdio.h> // 函数接受数组作为参数void printArray(int (*arr)[5], int size) {    for (int i = 0; i < size; i++) {        printf("%d ", (*arr)[i]);    }    printf("\n");} int main() {    int arr[5] = {1, 2, 3, 4, 5};     // 将数组名放在括号中传递给函数    printArray(&arr, 5);     return 0;}
复制代码


通过将数组名放在括号中,我们成功地将数组传递给函数,而无需退化为指针,保留了数组的维度信息。

3. sizeof 是一个运算符我们常常在 C 语言中使用 sizeof 关键字来获取数据类型或变量的大小。但是,你是否知道,sizeof 其实是一个运算符,而不仅仅是一个关键字?

在 C 语言中,sizeof 运算符用于计算对象的大小,返回一个 size_t 类型的值。它可以用于获取数组、结构体、变量等的大小,为我们在内存管理和指针操作中提供了便利。

#include <stdio.h> int main() {    int arr[5] = {1, 2, 3, 4, 5};     // 使用sizeof获取数组的大小    size_t size = sizeof(arr);     printf("数组大小:%zu 字节\n", size);     return 0;}
复制代码


这段代码中,我们使用 sizeof 运算符获取了数组的大小,展示了其在获取数据大小方面的强大功能。记住,sizeof 是一个运算符,不仅可以用于数据类型,还可以用于表达式,为我们的编程提供了更大的灵活性。

4. 空格不都是没用的在日常的代码编写中,我们往往会忽略代码中的空格,认为它们只是为了美观而已。但实际上,C 语言中的空格并不总是“没用的”。

在 C 语言中,空格通常被用于分隔不同的符号,使得代码更易读。然而,有趣的是,C 语言中的一些运算符也允许在其内部插入空格,而不会影响编译器的解析。

#include <stdio.h> int main() {    int a = 5;    int b=3;     // 在赋值运算符周围插入空格    int result = a   +   b;     printf("结果:%d\n", result);     return 0;}
复制代码


这段代码中,我们在赋值运算符和加法运算符周围插入了多个空格,但编译器仍能正确解析。这并不是鼓励滥用空格,而是要说明在某些情况下,适度的空格可以提高代码的可读性,使其更加清晰易懂。

总而言之,这些 C/C++语言的冷知识或许在日常的编程中不经常用到,但了解它们能够让你更深入地理解 C/C++语言的特性和灵活性。通过挖掘这些冷知识,我们可以写出更为精炼、高效的代码,提升编程的乐趣和水平。希望这些小小的发现能够让你在 C/C++语言的学习和使用中更上一层楼!

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
几个有趣的C/C++语言『冷知识』_C语言_伤感汤姆布利柏_InfoQ写作社区