C语言 符号的不同意义

C语言的许多符号在不同的上下文环境里有不同的意义,相当于被“重载”了。如下展示了一些符号的不同意义。

static

  • 在函数内部,表示该变量的值在各个调用间一直保持延续性。类似与全局变量,区别在于作用域不同。
  • 在函数外部,表示该函数或者变量只对本文件可见。

extern

  • 用于函数定义,表示全局可见(属于冗余,因为函数名在默认情况下具有外部的链接属性,如果函数没有在调用它的转换单元中定义,编译器就会把这个调用标记为外部,让链接程序处理它)
  • 用于变量,表示它在其他地方定义(变量名和函数不同,当某个名称的定义对于当前转换单元来说是外部的,如果希望用一个名称访问当前装换单元外的变量,就必须用 extern 关键字来声明该变量,表示该名称在当前块的外部定义。之后编译器就把变量标记为具有外部链接属性,链接程序就会在名称和它引用的变量之间建立链接。如果给定块中的一个名称有 extern 声明,就不能在同一个块中定义该名称)
  • 一般而言,使用 extern 有2中方式:第一种是在 C 文件中直接声明某个其他文件中定义的函数或全局变量为 extern,从而告诉编译器这个函数或变量是在其他 C 文件中定义的;第二种是在头文件中声明某个函数或变量为 extern,然后在需要引用该函数或变量的 C 文件中包含这个头文件。第二种是比较好的方式,因为头文件只需要编写一次就可以在其他所有需要引用这些函数或变量的 C 文件中被包含,相应地如果函数定义或者变量的定义发生了变化,也只需要修改头文件一个文件就可以了,否则必须修改所有引用这些外部函数或变量的 C 文件。

void

  • 作为函数的返回类型,表示不允许返回任何值
  • 在指针声明中,表示通用指针的类型
  • 位于参数列表中,表示没有参数

*

  • 乘法运算符
  • 用于指针,间接引用
  • 在声明中,表示指针

&

  • 位的 AND 操作符
  • 取地址符号

()

  • 在函数定义中,包围形式参数表
  • 调用一个函数
  • 改变表达式的运算次序
  • 将值转换为其他类型(强制类型转换)
  • 定义带参数的宏
  • 包围 sizeof 操作符的操作数

其他

  • <= 小于等于运算符
  • <<= 左移复合赋值运算符
### C语言符号的具体意义 C语言中的符号可以分为多种类别,每种类别都有其特定的功能和用途。以下是详细的解释: #### 1. **算术运算符** 这些运算符主要用于数值类型的计算。 - 加法 `+`:两个数相加的结果[^1]。 - 减法 `-`:两个数相减的结果[^1]。 - 乘法 `*`:两个数相乘的结果[^1]。 - 除法 `/`:两个数相除的结果[^1]。 - 求余 `%`:整数除法后的余数[^1]。 - 自增 `++`:使变量的值增加1[^1]。 - 自减 `--`:使变量的值减少1[^1]。 #### 2. **关系运算符** 用于比较两个值的关系。 - 大于 `>`:判断左边的值是否大于右边的值[^1]。 - 小于 `<`:判断左边的值是否小于右边的值[^1]。 - 等于 `==`:判断两边的值是否相等[^1]。 - 不等于 `!=`:判断两边的值是否不相等[^1]。 - 大于等于 `>=`:判断左边的值是否大于或等于右边的值[^1]。 - 小于等于 `<=`:判断左边的值是否小于或等于右边的值[^1]。 #### 3. **逻辑运算符** 用于布尔值的操作。 - 与 `&&`:当且仅当两个条件都为真时返回真[^1]。 - 或 `||`:只要有一个条件为真就返回真。 - 非 `!`:反转当前布尔值的状态[^1]。 #### 4. **位操作运算符** 对二进制位进行逐位操作。 - 位与 `&`:对应位均为1则结果为1,否则为0[^1]。 - 位或 `|`:对应位只要有1,则结果为1,全为0才为0。 - 位非 `~`:将每一位取反。 - 位异或 `^`:如果两位不同则结果为1,相同则为0[^1]。 - 左移 `<<`:将二进制表示向左移动指定位置。 - 右移 `>>`:将二进制表示向右移动指定位置[^1]。 #### 5. **赋值运算符** 用于给变量赋予新值。 - 简单赋值 `=`:将右侧的值赋给左侧的变量[^1]。 - 复合算术赋值 `+=`, `-=`, `*=`, `/=`, `%=`:先执行相应的算术运算再赋值[^1]。 - 复合位运算赋值 `&=`, `|=`, `^=`, `>>=`, `<<=`:先执行对应的位运算再赋值。 #### 6. **条件运算符** 这是一个三目运算符,形式为 `(condition ? value_if_true : value_if_false)`。 - 如果条件成立,则返回第一个值;否则返回第二个值[^1]。 #### 7. **逗号运算符** 用于连接多个表达式并依次求值,最终返回最后一个表达式的值。 - 形如 `expr1, expr2,..., exprN` 的结构[^1]。 #### 8. **指针运算符** 涉及内存地址的操作。 - 取内容 `*`:获取指针指向的内容[^1]。 - 取地址 `&`:获取某个变量的地址。 #### 9. **求字节数运算符** 用于查询某种数据类型占用的存储空间大小。 - 使用方式为 `sizeof(type)` 或 `sizeof(variable)`。 #### 10. **特殊运算符** 一些特殊的语法符号。 - 圆括号 `()`:用于函数调用或改变优先级[^2]。 - 方括号 `[]`:数组索引访问[^2]。 - 成员访问 `.`, `->`:分别用于结构体成员访问和通过指针访问结构体成员[^2]。 ```c // 示例代码展示部分符号的应用 #include <stdio.h> int main() { int a = 10; int b = 20; printf("a + b = %d\n", a + b); // 算术运算符 + printf("a > b is %s\n", (a > b) ? "true" : "false"); // 条件运算符 ? int *p = &a; // 指针运算符 & printf("*p = %d\n", *p); // 指针运算符 * return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值