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

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

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

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

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

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

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

上代码:

 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     int p, N = 5, *q = &N;
 6
 7     p = N * sizeof * q;
 8     printf("p = %d.\n", p);
 9
10     p = N * sizeof(int) * p;
11     printf("p = %d.\n", p);
12
13     p = N * sizeof((int) * q);
14     printf("p = %d.\n", p);
15
16     /* 错误: 双目运算符 * 操作数(‘unsigned int’和‘int *’)无效*/
17     //p = N * sizeof(int) * q;
18     //printf("p = %d.\n", p);
19
20     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---

转载于:https://www.cnblogs.com/RandyXu/archive/2013/03/22/2976382.html

C语言拾遗(二):符号重载相关推荐

  1. c语言中各个符号的意义及作用是什么,C语言特殊符号意义

    初学者可以来学学,包教包会 C语言中像%D &%f符号的作用说一下 最佳答案 C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(- ...

  2. c语言中0x11是多少,C语言中的符号

    C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(或称模运算,%).自增(++).自减(–)共七种. 2. ...

  3. C语言(二)— 整型

    编程进阶- C语言(二)- 整型 整型 在C语言中,整型数据一般用short.int.long三种数据类型来声明,int是C语言中常用的声明整形数据的数据类型,在现代的操作系统中,一般是占4字节(By ...

  4. c语言中格式符号错误,C语言中符号格式说明

    scanf 语法: #include int scanf( const char *format, ... ); scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并 ...

  5. 计算机网络符号意思,浅析网络语言中的符号网语_计算机网络论文.doc

    浅析网络语言中的符号网语_计算机网络论文.doc 浅析网络语言中的符号网语_计算机网络论文 浅析网络语言中的符号网语_计算机网络论文 论文关键词:符号网语特征成因规范 论文摘要:随着网络的普及,网络语 ...

  6. c语言之无符号/有符号数加减法运算

    c语言之无符号/有符号数加减法运算 转自:http://www.360doc.com/content/12/1129/15/1317564_250977880.shtml 1.加减运算指令是不区分有符 ...

  7. 【C语言】中文符号(句号,问号,感叹号)作为标识符进行分行处理

    文章目录 [C语言]中文符号(句号,问号,感叹号)作为标识符进行分行处理 一.前言 二.环境 三.代码实现 3.1 实现一 3.1.1 流程图 3.1.2 代码 3.1.3 原文本文件 3.1.4 结 ...

  8. C语言高级教程-C语言数组(二)

    ​ C语言高级教程之数组教程 C语言高级教程-C语言数组(二) 本文的编译环境 一.前文:C语言数组(一)的链接 二.C语言数组的寻址 2.1 使用寻址运算符"&" 2.2 ...

  9. c语言中特殊符号意义,C语言特殊符号意义Word版

    <C语言特殊符号意义Word版>由会员分享,可在线阅读,更多相关<C语言特殊符号意义Word版(18页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有 ...

最新文章

  1. coc跑团san数值规则_为什么B站上有些coc跑团7版规则san值四五十,但是掉的时候只是掉1D3,是不是应该是20上限?...
  2. 把一个dataset的表放在另一个dataset里面_视频自监督一. STCR: 一个基于数据增强的简单有效正则项 (降低静态信息的影响)...
  3. angular1x初始与架构演进(二)
  4. 生产上第一使用线程池后的总结与反思
  5. 【阿里云课程】循环神经网络:RNN及其改进
  6. python中的代码复用与函数递归
  7. 让你直呼哇塞的API管理神器!
  8. 【趣话编程】一个整数+1引发的灾难
  9. mac无法访问samba共享 提示输入用户名密码
  10. python实现三阶魔方还原
  11. jq 清除ajax缓存,js清除浏览器缓存的几种方法
  12. 基于AdaBoost的人脸检测 含源码
  13. 面试中常见的问题总结
  14. RAKsmart:Linux SSH 客户端断开后保持进程继续运行配置方法
  15. 了解react-hook以及State Hook
  16. 要找工科男朋友的N个理由
  17. 为什么服务器都是8点维护,25日全服维护8小时 分服务器还是开新副本
  18. python processpoolexecutor_理解Python的PoolExecutor
  19. 2022 ICPC网络预选赛第二场 J A Game about Increasing Sequences 歪解
  20. 如何在Github中添加图片

热门文章

  1. mysql中的模糊查询(非原创)
  2. 摘抄:java查询数据导出excel并返回给浏览器下载
  3. 面向对象一些概念简述
  4. 打印Fibonacci数列方法汇总(前20项,每行5个)
  5. Commons Configuration2 - Quick start guide
  6. Silverlight、XAML实现滚动文字
  7. 计算机网络学习笔记(27. Email应用概述)
  8. 零基础带你学习计算机网络复习—(五)
  9. 字节面试:如何用Redis实现一个分布式锁?
  10. 再过十年,电脑游戏会被手机游戏完全取代吗?