C语言拾遗(二):符号重载

C语言拾遗(二):符号重载

C语言一个很重要的特点是简洁。但有时候它太简洁了,免备案空间,仅增加,修改或删除一个字符,原先的程序就可以截然不同。

简洁的C语言会让一个符号,在不同的上下文环境里表示不同的意思。这称之为符号“重载”。

比如void符号,会有以下常见的不同含义:

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

2>在指针声明中,表示通用指针

3>位于函数的参数列表中,表示没有参数

再来举个乘号*的例子,看看有趣的,“糟糕的”符号重载吧。

上代码:

1 #include <stdio.h> main() 4 { 5int p, N = 5, *q = &N; 6 7p = N * sizeof * q;, p); 9 10p = N * sizeof(int) * p;, p);12 13p = N * sizeof((int) * q);, p);p = N * sizeof(int) * q;return 0;21 }

先不要看变量的定义(因为变量的类型会有提示作用哦),直接看line7,10,13,17的表达式,你知道分别表示什么意思吗?

好了,看结果吧,

randy@ubuntu:~/C_Language$ ./a.out p = 20.p = 400.p = 20.解释:

line7:又遇到sizeof了,记住,sizeof是运算符,不是函数。sizeof的操作数是类型时,必须叫括号,香港虚拟主机,比如sizeof(int)。N=5,q是指针,香港虚拟主机,指向N的地址,

所以*q=5,是int类型,sizeof(int)=4,故p=5*4=20.

line10:p=5*4*20=400.

line13:其实是跟line7一样一样儿的。

line17:该表达式被我注掉了,因为编译不通过。应该知道原因了吧?(答案在注释)

小结:例子中,一个小小的*是不是有点绕人,当然还有很多其他符号重载的例子。

   比如static,extern, &, <, () 等。

   这是C语言的简洁之美呢,还是简洁之痛呢?抛砖引玉,欢迎讨论!

—End—

posted on

比谁都感激这份“不能说出的爱”。

C语言拾遗(二):符号重载

相关文章:

你感兴趣的文章:

标签云: