`

总结之《明解C语言》

 
阅读更多

 

明解C语言,对于有一定C语言基础,有需要注重细节的人来说是不错的选择。

下面记录下来,个人觉得应该注意的地方

 

1.  

int tensu[NUMBER];   //像这样创建变量实体的声明称为定义声明

 

extern int tensu[];  //使用了extern的声明表示“使用的是在某处创建的tensu”。这里并没有真正创建出变量的实体,因此称为非定义声明。

 

了解extern的使用,推荐阅读P127

 

2.

顺序查找法

int search(const int vc[], int key, int no){

int i = 0;

while(1){

if(i == no) return -1;// failed

if(vc[i] == key)

return (i);

i++;

}

}

 

哨兵查找法 

是将数组的最后一位赋值成该key,能够减少循环判断,代码简洁

int search(const int vc[], int key, int no){

int i = 0;

vc[no] = key;

for(;vc[i] != key;i++)

;   //日本人很喜欢这样写,个人觉得这种写法比较好  分号单另起行 不容易出错。

return (i == no? -1 : i);

}

 

静态存储期

被赋予了静态存储空间的对象,会在main函数开始执行之前被初始化。因此,虽说程序执行的时候会经过static int sx = 0;,但其实那个时候

并没有进行初始化处理,也就是说该声明并未进行赋值处理。

另外,如果没有赋予初始值,则该对象会自动初始化为0。

 

why?

--------摘自《专业嵌入式软件开发--全面走向高质高效编程》

在程序编译后,会生成.o文件,在这个文件中 包含了.text  .data  .bss段和符号表等信息,而对于初始化部位0的常量,编译器会将它放入.data段中,

而对于初始化为0的变量会被放入.bss段中。实际上,没有初始化的变量也像初始化为0的变量那样被放入.bss段中。由于.bss段中存放的数据是初始化为0

或没有初始化好的,所以不需要将其内容像.data段那样存放在程序文件中。当程序被引导加载器加载以后,引导加载器将执行权交给加载程序之前,会把

.bss段所在的内存区域全部初始化为0.这就是为什么没有设置初始化的全局变量其值却总是为0的缘故。

 

所以,才有上文的“声明时未进行初始化处理”

 

p145 有一张存储器和对象的寿命图 值得理解

 

第七章  基本数据类型

当时学C语言时 没有仔细注意  里面的水还是比较深的

 

有取值范围,反码补码,进制转换,位操作,溢出,浮点操作等

 

1.在vs2008中

long int 和 int 的取值范围是 -2147483648 ~ 2147483647

 

sizeof(char) = 1

sizeof(short) = 2

sizeof(int) = 4

sizeof(long) = 4

sizeof(double) = 8

sizeof(double*) = 4

 

12345U 为无符号数12345 

后缀为L 为long

后缀为LU 为unsigned long

 

如何将十进制数用二进制表示出来?

1.最简单的方式是  除2取余数

2.用移位操作

  1) 先计算计算机的位数

  cout_bits(~0U);

  

  // 求出unsigned的位数

  int cout_bits(unsigned x){

int count = 0;

while(x){

if(x & 1U) count++;

x >>= 1;

}

return count;

  }

 

  // 输出,显示位的内容

  void prints_bits(unsigned x){

int i;

for(i = cout_bits(~0U) - 1; i>=0; i--){

putchar((x >> i)& 1U) ? '1' : '0';

}

  }

 

  main(){

prints_bits(12345U);

  }

 

3.逻辑移位和算数移位

在执行左移和右移时,注意不要对负数进行位移(破坏符号位),也不要作超过位数的位移(无意义)

 

左移no位时,如果一个数是无符号整数型,那么运算结果就相当于这个数乘以2的no次方

右移no位时,如果一个数是无符号整数型,那么运算结果就相当于这个数除以2的no次方所得的商的整数部分

 

逻辑位移不考虑符号位,所有的二进制位都参与位移,填0 (左移和右移一样)

 

算数位移考虑符号位,保留最高位的符号位,只有其他位会做位移。

还维持“左移一位,值变为原来的两倍;右移一位变为原来的二分之一”的规则

所以左移时,符号位不动,填0

右移时,根据符号位是什么就填什么

 

4. 65535加1的结果为0,即循环使用0--最大值。

 

5. 有符号整形和无符号整形

将有符号整形转换为位数相同或位数更多的无符号整数时,如果该有符号整数不为负数,则数值不会发生变化。

否则,若无符号整数的位数较大,则先将有符号整数提升为与无符号整数长度相同的有符号整数。然后再与无

符号整数类型可表示的最大数加1后的值相加,将有符号整数转换为无符号整数。

如图:



 

 

 

将整数类数据类型转换为位数更少的无符号整数时,除以比位数较少的数据类型可表示的最大无符号数大1的数,所得的非负余数就是转换后的值。

如图:






 

 

将整数类数据类型转换为位数更少的有符号整数时,以及将无符号整数转换为位数相同的有符号整数时,如果不能正确表示转换后的值,则此时的操作由编译器定。

 

6. 注意宏定义的展开

 

第九章 字符串

注意:

char pa[] = "abc\0def";

sizeof(pa) = 8;   //但是输出时 截取成abc

 

sizeof("abc\0def") = 8;

 

printf("abc\0def");  //输出abc

 

char *p = "abc\0def";

sizeof(p) = 4;    //指针大小为4

 

 

1. printf("%-8s", str); // 如果设置了—标志,则表示左对齐,否则表示右对齐(空白部分填补空格)

 

2. 除了初始化赋值的时候,我们不能将数组的初始值或字符串直接赋予数组变量

char str[4];

str = {'a','a','a','\0'};  // not ok

str = "aaa";               // not ok

 

 

2. 熟悉字符串复制方法

char *strcpy(char *s1, const char *s2){

char *temp = s1;

while(*s1++ = *s2++) // 当s1为0时退出循环

;

return temp;

}

 

 

3.字符串转换函数

int atoi(const char *str) // 将字符串转换为int型

 

float atof(const char *str) // 将字符串转换为浮点型

 

long atoi(const char *str) // 将字符串转换为long型

 

第十三章  文件和流

表示标准流的stdin,stdout,stderr都是指向FILE型的指针



 



 



 

 

 




 
 

 

 

c语言实现16进制文件读取

http://xiabin1235910-qq-com.iteye.com/blog/1883534

 

c语言复制二进制文件

http://xiabin1235910-qq-com.iteye.com/blog/1883532

C语言逐行读取文件内容

http://xiabin1235910-qq-com.iteye.com/blog/1883219

 

 

以上其他重点之处,已经通过图片的方式呈现,不加赘述。。

 

 

 

 

  • 大小: 3.7 KB
  • 大小: 29.2 KB
  • 大小: 5.3 KB
  • 大小: 26.3 KB
  • 大小: 1.1 MB
  • 大小: 876.4 KB
  • 大小: 1 MB
  • 大小: 1.2 MB
  • 大小: 1 MB
分享到:
评论

相关推荐

    基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip

    基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip

    基于python实现树莓派和传感器的植物生长环境评估信息系统

    【作品名称】:基于python实现树莓派和传感器的植物生长环境评估信息系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于python实现树莓派和传感器的植物生长环境评估信息系统

    优质资源,Yearning Mysql SQL审核平台

    Yearning Mysql SQL审核平台(使用go语言)

    c语言课程设计-职工资源管理系统.rar

    void displayMenu() { printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("+ 职工资源管理系统 +\n"); printf("+ +\n"); printf("+ 1. 录入职工信息 +\n"); printf("+ 2. 显示全部职工信息 +\n"); printf("+ 3. 根据工号查询

    华为OD机试D卷 - 来自异国的客人 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    2024华为OD机试D卷 - 最长的指定瑕疵度的元音子串 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于nodejs电影交流网站(源码 + 说明文档)

    基于nodejs电影交流网站(源码 + 说明文档) 第二章 开发技术介绍 1 2.2.1 Nodejs技术 1 2.2.2 mysql数据库介绍 1 2.2.3 MySQL环境配置 1 2.2.4 B/S架构 2 2.2.5 Vue框架 2 第三章 系统分析 1 3.1 可行性分析 1 3.1.1 技术可行性 1 3.1.2操作可行性 1 3.1.3 经济可行性 1 3.2性能需求分析 1 3.3功能分析 2 第四章 系统设计 4 4.1功能结构 4 4.2 数据库设计 4 4.2.1 数据库E/R图 4 4.2.2 数据库表 5 第五章 系统功能实现 11 5.1系统功能模块 11 5.2后台登录模块 12 5.2.1管理员功能 13 5.2.2 用户功能 15 第六章 系统测试 16

    setuptools-0.9.8.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-23.2.1.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-10.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    App工具查看md5、公钥等信息

    App工具查看md5、公钥等信息

    2024华为OD机试D卷 - 高效的任务规划 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于co-revDSD方法的计算程序

    基于co-revDSD方法的计算程序

    setuptools-54.0.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    课程设计 基于FPGA的电子表源码+全部资料齐全.zip

    【资源说明】 课程设计 基于FPGA的电子表源码+全部资料齐全.zip课程设计 基于FPGA的电子表源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Fig0309.tif

    Fig0309.tif

    setuptools-5.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-8.0.1.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    华为OD机试D卷 - 连续字母长度 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    第十章 Python标准库(jupyter版 人工智能编程基础)

    第十章 Python标准库(jupyter版 人工智能编程基础)

Global site tag (gtag.js) - Google Analytics