c诡异离奇,缺陷重重,却获得了巨大的成功

编译器设计者的金科玉律:效率=一切

c预处理器:1.字符串替换 2.头文件包含 3.通用代码模板的扩展

预处理一定要使用强制类型转换!!!明确数据类型

每一个ANSI C编译器必须能够支持:

@在函数定义中形参数量的上限至少可以达到31个。

@在函数调用时实参数量的上限至少可以达到31个。

@在一个源代码行里至少可以有509个字符

@在表达式中至少可以支持32层嵌套的括号

@long int的最大值不得小于2147483647(不得低于32位)

标准设立后轻易不作变动,即使是修改错误

const和*的组合通常只用于在数组形式的参数中模拟传值调用。他声称“我给你一个指向他的指针,但你不能修改它”,这个约定类似于极为常见的void*用法,尽管在理论上他可以用于任何情形,但通常被限制于把指针从一种类型装换到另一种类型。

const int limit = 10;

const int *lp = &limit;

lp是一个指向常量整型的指针。这个指针不能用于修改这个×××数,但在任何时候,这个指针本身的值却可以改变。这样,它指向了不同的地址,对它进行解除引用操作会得到一个不同的值。

安静的改变

1.算数转换 2。字符和整型(×××升级)3.寻常算数转换

(无符号保留原则)当一个无符号类型与int或更小的整型混合使用时,结果类型是无符号类型。 对应的就是(值保留原则(可能是有符号数,可能是无符号数,取决于操作数的类型的相对的大小))

尽量不用无符号数!!!

sizeof返回unsigned int

只有在使用位段和二进制掩码时,才可以使用无符号数。可以使用强制类型转换

一个L的NUL用于结束一个ASCII码零的正确术语。

两个L的NULL用于表示什么也不指向(空指针)。

i = 1, 2;

因为=运算符高于,所以(i=1)后,i被赋值为1, 2这个运算无意义,最终i = 1

Shell参数解析:

要找出目录中的哪些文件时链接文件:ls -l | grep link

maximal munch strategy(最大一口策略)

函数中,不能把局部变量的指针,作为返回值。

解决办法:

@返回一个指向字符串常量的指针(只适用于简单的字符串)

char* func(){reutrn "wahaha!";}

@使用全局声明的数组

@使用静态数组(和全局数组一样,大型缓冲区若果闲置不用,非常浪费内存空间)

@显式分配一些内存,保存返回的值

char * func(){

char *s = malloc(20);

return s;

}

它应用于多线程的代码。缺点在于程序员必须承担内存管理的责任

@最好由调用者分配内存来保存函数的返回值。

void func(char* result, int size){

}

转载于:https://blog.51cto.com/no001/560673

c专家编程 读书笔记相关推荐

  1. C专家编程-读书笔记(书本顺序)

    C语言设计哲学:   一切工作程序员自己负责.   语言中的所有特性都不需要隐式的运行时支持.   程序员所做的都是对的.   程序员应该知道自己在干什么,并保证自己的所作所为是正确的. ====== ...

  2. C专家编程 读书笔记

    在ANSI C中,如果要声明空参数表,则必须使用关键字void进行显式声明: CPU,16位地址总线,能够访问2^16也就是64KB的内存:20位地址总线,可以访问2^20也就是1MB的内存:32位地 ...

  3. C专家编程--读书笔记九 再论数组

    第九章 一.知识点 1.所有作为函数参数的数组名总是可以通过编译器转换成指针. 然而,数组和指针在编译器处理时是不同的,在运行时的表示形式也是不一样的,并可能产生不同的代码.对编译器而言,一个数组就是 ...

  4. C专家编程--读书笔记十 再论指针

    第十章 一.知识点 1.C标准规定%s说明符的参数必须是一个指向字符数组的指针.所以如: char *p = NULL; printf("%s", p); 这是不正确的.NULL是 ...

  5. C专家编程--读书笔记六 运行时数据结构

    第六章 一.知识点 1.代码和数据的区别也可以认为是编译时和运行时的分界线.编译器的绝大部分工作都跟翻译代码有关:必要的数据存储管理的绝大部分都在运行时进行.(P121) 2."a.out& ...

  6. C专家编程读书笔记一:C语言晦涩难懂的声明

    理解C语言声明的优先级规则: 声明从它的名字开始读取,然后按照优先级顺序依次读取 优先级从高到低依次是: B1     声明中被括号括起来的那部分 B2     后缀操作符:括号()表示是一个函数,二 ...

  7. 《程序员修炼之道–从小工到专家》读书笔记

    <程序员修炼之道–从小工到专家>的读书笔记 <程序员修炼之道–从小工到专家>[美]Andrew Hunt / David Thomas 著 马维达 译 看这本书主要使用了检视阅 ...

  8. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  9. mozart-oz中有限域编程读书笔记

    mozart-oz自带文档: <Finite Domain Constraint Programming in Oz. A Tutorial.>读书笔记 http://www.mozart ...

最新文章

  1. Centos6.3下apache+svn部署web版本同步
  2. 我的360破解考题答案
  3. 微软称电脑系统识别能力已经超越了人类
  4. PMcaff杂谈社第一期:红包那些事儿
  5. java对象复制到另一个对象中_spring: beanutils.copyproperties将一个对象的数据塞入到另一个对象中(合并对象)...
  6. adb logcat 查看日志
  7. 从pg_hba.conf文件谈谈postgresql的连接认证
  8. 外设驱动库开发笔记21:BME680环境传感器驱动
  9. MIT操作系统神课 - 6.828
  10. snmpwalk访问华为防火墙snmp服务超时失败问题
  11. MicrosoftStore无法下载软件
  12. java游戏猿人时代_猿人时代_JAVA游戏免费版下载_7723手机游戏[www.7723.cn]
  13. 山寨手机拇指30掌盟APP软件游戏下载安装破解激活图文教程2
  14. 路网自动构建路段拓扑
  15. git bash粘贴快捷键
  16. emlog模板 Meta主题带后台开源版 资源娱乐网模板
  17. uniapp抽奖组件-动画效果之各类抽奖(跳跃)
  18. 适当的放松也是一种幸事
  19. 管理罗盘-管理者角色认知与定位
  20. 2021-11-16日完成任务:中医体质辨识设计与实现

热门文章

  1. virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
  2. Java实现学生管理系统(完整代码)
  3. shell 清楚空格_Cygwin系列(五):Shell命令行初体验
  4. mysql pdo 读取字段名_PDO如何处理SQL语句中对字段名以及表名的转义
  5. C++ 中 freopen()函数的用法
  6. React 使用browserHistory项目访问404问题
  7. Servlet是否单例?
  8. Android studio报Error:(26, 13)-v7:27.错误的解决方法
  9. PMI、砺志咨询活动:项目经理软技能征文大赛—15个PDU、免费软技能培训
  10. MVP 模式实例解析(转)