C语言里面有用到@的么?

我一开始以为@是某个宏,但是并没有找到,如图这个定义说明了什么😫

img

C语言没有@这个运算符

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7633009
  • 这篇博客也不错, 你可以看下【C语言】二分查找。给定一个有序的数列,查找指定的数值。如果查询到该数值,则返回该数值在数组中的位置。
  • 除此之外, 这篇博客: C语言不完全类型是什么?有什么用途?中的 1、不完全类型的概念 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • ISO(国际标准化组织(International Standard Organization))将C语言分为三个不同类型集合: 函数类型、对象类型和不完全类型,具体说明如下所示:

    • 函数类型:函数就是C语言的模块、一系列 C 语句的集合,有较强的独立性,能完成某个特定的功能,可以相互调用;
    • 对象类型:C语言的对象类型不是说面向对象编程,而是在内存中创建具有特定长度,有意义的类型,例如char、int、数组、结构体、指针等;
    • 不完全类型:不完全类型是指除了函数类型之外,大小不能被确定的类型。比如,声明了一个数组,但不给出数组的长度;声明了一个结构类型,但不给出结构体的定义,只告诉编译器这是一个结构体。在最终你还是必须得给出完整的定义,否则编译器在编译单元中都找不到不完全类型的完整定义信息的话就会报错。

    C语言所有数据类型如下图所示:

    在C99标准中对不完全类型描述如下:

    The void type comprises an empty set of values; it is an incomplete type that cannot be completed. (C99 6.2.5/19)

    An array type of unknown size is an incomplete type. It is completed, for an identifier of that type, by specifying the size in a later declaration (with internal or external linkage). A structure or union type of unknown content (as described in 6.7.2.3) is an incomplete type. It is completed, for all declarations of that type, by declaring the same structure or union tag with its defining content later in the same scope.(C99 6.2.5/22)

    总结讲,C/C++中不完全类型有三种不同形式:void、未指定长度的数组以及具有非指定内容的结构和联合。void类型与其他两种类型不同,因为它是无法完成的不完全类型,并且它用作特殊函数返回和参数类型。

    不完全类型是暂时没有完全定义好的类型,编译器不知道这种类型该占几个字节的存储空间,例如以下定义方式:

    int str[]; //不完全类型数组str定义
    
    …
    
    int str[10]; //定义str数组完整的类型信息

    再举个例子,在头*.h文件中声明结构:typedef struct __list *list_t;,最终在*.c文件中定义如下:

    struct __list {
    
        struct __list *prev;
    
        struct __list *next;
    
        viud   *data;
    
    };

    此时,结构体变量*list_t就属于不完全类型,不完全类型不包含具体的类型信息,所以在未完整定义前不能通过sizeof来获知大小,并且不完全类型定义不适合局部变量。

  • 您还可以看一下 李飞老师的C语言开发之数据结构与算法一课程中的 链表的插入(考虑表头和表尾)小节, 巩固相关知识点