第一章引言

什么是定义及声明?

定义:定义是编译器创建一个对象,并且为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。

声明:1.告诉编译器该变量名已经匹配了一个内存上。2.告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量

定义声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存


1.1 最宽恒大量的关键字----auto

编译器在默认的缺省情况下,所有变量都是 auto 的。读者可以当作不存在该关键字。


1.2 最快的关键字---- register

这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内存寻址访问以提高效率。

1.2.1,皇帝身边的小太监----寄存器

寄存器其实就是一块一块小的存储空间,只不过其存取速度要比硬盘和内存快得多。(价格也贵很多)

数据从内存里拿出来先放到寄存器,然后 CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存放到内存里。

1.2.2,使用 register 修饰符的注意点

虽然寄存器的速度非常快,但是使用 register 修饰符也有些限制的:register 变量必须是能被 CPU 寄存器所接受的类型。意味着 register 变量必须是一个单个的值,并且其长度应小于或等于整型的长度。 而且 register 变量可能不存放在内存中,所以不能用取址运算符“&”来获取 register 变量的地址。


1.3,最名不符实的关键字----static

不要误以为关键字 static 很安静,其实它一点也不安静。这个关键字在 C 语言里主要有两个作用,C++对它进行了扩展。

1.3.1,修饰变

第一个作用:修饰变量。静态变量又分为局部静态和全局静态变量,它们都存在内存的静态区。

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern 声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。想要使用就得在前面再加 extern ***。

静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被 static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

1.3.2,修饰函数

第二个作用:修饰函数。函数前加 static 使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。不用担心自己定义的函数,是否会与其它文件中的函数同名。


1.4,基本数据类型----short、int、long、char、float、double

1.4.1,数据类型与“模子”

六种数据类型的字节大小

1.4.2,变量的命名规则

在《高质量的C-C++编程》的笔记部分已记录

(标识符的命名规则暂未阅读)


1.5,最冤枉的关键字----sizeof

1.5.1,常年被人误认为函数

sizeof是关键字。

sizeof 在计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。且一般情下,sizeo 是在编译时求值,所以 sizeof(i++)不会引起副作用。但由于sizeof(i++)与 sizof(i)的结果一样,所以没有必要且不允许写这样的代码。同样,“sizeof(i=1234);”这样的代码也不允许,因为i的值仍为0,并没有被赋值为1234。sizeof 操作符里面不要有其他运算,否则不会达到预期的目的。

在 C99标准 中,计算柔性数组所占空间大小时,sizeof 是在运行时求值,此为特例。

1.5.2,sizeof(int)*p 表示什么意思?

几个关于指针内存大小的问题-数组


1.6,signed、unsigned 关键字

基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是 1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是 0,表明这个数是正数,其值为除最高位以外的剩余位的值。

这样的话,一个 32 位的 signed int 类型整数其值表示法范围为:- 231~ 231 -1;8 位的char 类型数其值表示的范围为- 27 ~ 27 -1。一个 32 位的 unsigned int 类型整数其值表示法范围为:0~ 232 -1;8 位的 char 类型数其值表示的范围为 0~ 28-1。同样我们的 signed 关键字也很宽恒大量,你也可以完全当它不存在,编译器缺省默认情况下数据为 signed 类型的。


int main()
{signed char a[1000];int i;for(i=0; i<1000; i++){a[i] = -1-i;}printf("%d\n",strlen(a));return 0;
}

这个题的答案是255(原因:a[0]~a[254]里面的值都不为 0,而 a[255]的值为 0。strlen 函数是计算字符串长度的,并不包含字符串最后的\0。判断一个字符串是否结束的标志就是看是否遇到\0;如果遇到\0.则认为本字符串结束)


[规则 1-18]单纯的 char 类型应该只用于字符值的存储和使用有符号和无符号的“char”型变量只能用于数值的存储和使用。

[规则 1-19]所有无符号型常量都应该带有字母 U后缀


1.7,if、else 组合(在《高质量的C-C++编程》的笔记部分已记录)

1.7.1,bool 变量与“零值”进行比较
1.7.2, float 变量与“零值”进行比较
1.7.3,指针变量与“零值”进行比较
1.7.4,else 到底与哪个 if 配对呢?
1.7.5,if 语句后面的分号
1.7.6,使用 if 语句的其他注意事项

1.8,switch、case 组合

1.8.1,不要拿青龙偃月刀去削苹果

[规则1-26]每个 case 语的结尾绝对不要忘了加 break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

[规则1-27]最后必须使用 default 分支。即使序真的不需要 default 处理,也应该保留语句。这样做并非画蛇添足,可以避免让人误以为你忘了 default 处理

[规则1-28]在switch case 组合中,禁止使用 return 语句。

[规则1-29]switch 表达式不应是有效的布尔值。

1.8.2,case 关键字后面的值有什么要求吗?

case 后面只能是整型或字符型的常量或常量表达式

1.8.3,case 语句的排列顺序

[规则1-30]按字母或数字顺序排列各条 case 语句。

[规则 1-31]把正常情况放在前面,而把异常情况放在后面。

[规则 1-32]按执行频率排列 case 语句。

1.8.4,使用 case 语句的其他注意事项

[规则1-33]简化每种情况对应的操作。

[规则 1-34]不要为了使用 case 语而刻意制造一个变量。

[规则1-35]将 default 子句只用于检查真正的默认情况。


1.9,do、while、for 关键字(在《高质量的C-C++编程》的笔记部分已记录)

1.9.1,break 与 continue 的区别
1.9.2,循环语句的注意点

1.10,goto 关键字(在《高质量的C-C++编程》的笔记部分已记录)


1.11,void 关键字(中途断网编写的内容丢失,也没人会看我的笔记,我就不补了,有需要我再补)


1.12,return 关键字

[规则1-48]return 语句不可返回指向“内存”的“指针”因为该内存在函数体结束时被自动销毁


1.13,const 关键字也许该被替换为 readolny(下次阅读)

1.13.1 const修饰的只读变量
1.13.2,节省空间,避免不必要的内存分配,同时提高效率

1.14,最易变的关键字----volatile


1.15,最会带帽子的关键字----extern


1.16,struct 关键字

1.15.1,空结构体多大?
1.15.2,柔性数组
1.15.3,struct 与 class 的区别

1.16,union 关键字

1.16.1,大小端模式对 union 类型数据的影响
1.16.2,如何用程序确认当前系统的存储模式?

1.17,enum 关键字

1.17.1, 枚举类型的使用方法

1.17.2,枚举与#define 宏的区别


1.18,伟大的缝纫师----typedef 关键字

1.18.1,关于马甲的笑话

1.18.2,历史的误会----也许应该是 typerename

1.18.3,typedef 与#define 的区别

1.18.4,#define a int[10]与 typedef int a[10];


读书笔记之《C语言深度剖析》第一章:关键字相关推荐

  1. 怎么样用c语言读一章图片,读c语言深度剖析 -- 第一章 关键字(32个)

    auto声明自动变量,缺省时编译器 int声明整型变量 double声明双精度变量 long声明长整型变量 char声明字符型变量 float声明浮点型变量 short声明短整型变量 signed声明 ...

  2. 读书笔记|《金字塔原理》_第一章

    读书笔记|<金字塔原理>_第一章 [章节]--第一章为什么要用金字塔结构 [讲了什么] 1.首先是为什么要用金字塔结构? 2.如何将思想组织成金字塔结构? 2.1 归类分组,将思想组织成金 ...

  3. 读书笔记:《图解HTTP》第一章 网络基础

    原文地址 博客积累地址 HTTP的诞生及发展 HTTP是为了知识共享而诞生,最初的设计理念是让远隔两地的研究者们共享知识,借助多文档之间相互关联形成的超文本,连成可相互参阅的 WWW(World Wi ...

  4. 【C语言你真的学会了吗】C语言深度剖析(1)【关键字深度剖析】

    目标: 初步了解关键字分类 深刻理解变量 深刻理解定义与声明 auto关键字的理解 站在存储结构角度,理解register关键字 目录 1.关键字分类 2.第一个C程序(补充内容) 3.变量的定义和声 ...

  5. C语言深度剖析笔记1

    关键字的秘密 数据类型 什么是数据类型? 数据类型可以理解为固定内存大小的别名; 数据类型是创建变量的模子(花形的,圆形的,星形的等等); char 1byte short 2byte int 4by ...

  6. C语言深度剖析笔记2

    接上半部分 C语言深度剖析笔记1 https://blog.csdn.net/halazi100/article/details/125844487 C语言深度剖析笔记1 指针 变量回顾 既然程序中的 ...

  7. 国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌

    国嵌C语言深度剖析班(第一期)共20个课程,包含源码及教程,主要讲了基本数据类型分析.auto,register,static分析.if,switch,do,while,for分析等,本教程提供1-5 ...

  8. c语言深度剖析百度云,《C语言深度剖析》笔记

    <C语言深度剖析>笔记 1.在c语言中,凡不加返回值类型限定的函数,就会被编译器作为返 回整形处理. 2.register 变量必须是一个单个的值,并且其长度应小于或等于整型 的长度.而且 ...

  9. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  10. [学习笔记]C语言深度剖析

    近期正在看<C语言深度剖析>,里面有一个讲解自加运算符(++),有一程序如下: void main() {int i;for(i=0, printf("First i = %d\ ...

最新文章

  1. mysql数据库连接配置路径_[zz]MySQL数据库主从同步安装与配置总结
  2. 【免费报名】与阿里云一同探索视频云的新技术与新场景
  3. 680. 验证回文字符串 Ⅱ golang
  4. 8 MM配置-主数据-定义行业部门和具体行业部门字段选择
  5. 计算机中Git配置环境变量 - 教程篇
  6. asp.net httprequest httpresponse
  7. 宅在家里写数据库中联表查询
  8. vs设置编码格式_轻松编辑PDF文档的贝茨编码
  9. java多态编译_关于java:编译时多态是否是这样的运行时多态?
  10. python 表白程序代码_程序员python表白代码
  11. ubuntu装指定分区_安装Ubuntu时如何手动指定分区(高级分区)
  12. ad20中如何在pcb里查找器件,AD中原理图如何查找相应的元件?
  13. Ubuntu 下启用trackPoint
  14. 打字测试软件 tt,TT打字测试软件
  15. 实验一 第2关:从自然数中取3个数进行组合之递归算法任务描述
  16. mfc100u.dll丢失的解决方法
  17. selenium登录163邮箱,得到cookie,requests后续请求
  18. Kali Linux中无法使用pip的解决方法
  19. 神经网络权重是什么意思,神经网络权重调整方法
  20. 使用Intel XED检测Linux内核是否被rootkit控制

热门文章

  1. 计算机如何寻址大学计算机,寻址-天津大学计算机科学与技术学院.ppt
  2. python数据类型转换——矩阵float转int
  3. java中di,在Java中什么是IoC和DI?DI是如何实现的?
  4. 黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
  5. 京东购买意向预测(三)
  6. [639]极验验证码破解分析
  7. pgsql:存储过程简单示例
  8. ***对调查问卷结果实现统计,并将结果写入csv文件
  9. 航海家炒股软件测试工资,防水防震! 海盗船“航海家”U盘测试
  10. 音视频格式转换神器与html视频元素加字幕—零基础自学网页制作