C语言中类似的符号是如何具有多种不同意义的?

本文详细阐述了C语言中static、extern和void等关键字的用途,以及指针、运算符如*、&和sizeof的用法。讨论了sizeof操作符在计算变量和类型占用字节数中的作用,以及在表达式中可能引起的歧义。文章强调了理解和测试这些概念的重要性,以避免编程中的误解和错误。
摘要由CSDN通过智能技术生成
符号意义
static

在函数内部,表示该变量的值在各个调用间一直保持延续性

在函数这一级,表示该函数只对本文件可见

extern

用于函数定义,表示全局可见(属于冗余的)

用于变量,表示它在其他地方定义

void

作为函数的返回类型,表示不返回任何值

在指针声明中,表示通用指针的类型

位于参数列表中,表示没有参数

*

乘法运算符

用于指针,间接引用

在声明中,表示指针

&

位的AND操作等

取地址操作符

=赋值符
==比较运算符

<=

<<=

小于等于运算符

左移复合赋值运算符

<

小于运算符

#include 指令的左定界符

()

在函数定义中,包围形式参数表。

调用一个函数。

改变表达式的运算次序

将值转换为其他类型(强制类型转换)。

定义带参数的宏。

包围sizeof操作符的操作数(如果它类型)

除此之外,还有一些符号具有多个容易混淆的意思。有一位心里没底的程序员面对if(x>>4)这样的语曾经感到困感,问道“这是什么意思?它是不是表示大于4?”

重载存在问题之处如下面的语句所示:

p = N * sizeof  * q;


你能不能马上推断出,这里是一个乘号还是两个?提示:接下去的一条语句是:

r = malloc(p);


答案是这里只有一个乘号,因为 sizeof 操作符把指针q 指向的东西(即*q)作为操作数它返回q所指向对象的类型的字节数,便于 malloc 函数分配内存。当 sizeof 的操作数是个类型名时,两边必须加上括号(这常常使人误以为它是个函数),但操作数如果是变量则不必加括号。
这里有一个更为复杂的例子:
 

apple = sizeof(int) * p;

这代表什么意思?是 int 的长度乘以p?或者是把知类型的指针 p 强制转换为 int,然后进行 sizeof 操作?或者还有其他更奇怪的解释?这里没有给出答案,要想成为一位熟练的程序员,必须要自己编写测试程序探索这类问题。请试试吧!看看是什么结果。你让一个符号所表达的意思越多,编译器就越难检测到这个符号在你的使用中所存在的异常情况。这并不像那些有烦恼的人那样在迪斯尼东园与奇异鸟一起歌唱就可解除烦恼。C语言似乎比其他语言更靠近标记歧义性的曲折边缘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值