c语言程序设计金科,c专家编程 读书笔记

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用于表示什么也不指向(空指针)。

28cb02c02125acffe577c14e07c6e3bf.png

i = 1, 2;

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

888f4289a00555535adf51a331b9e941.png

d06752e7160c11966f5a54dd962dd4e3.png

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){

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值