《实用C语言编程》读书笔记

2013年3月12日

要点记录:

1.C与C++哪一个更好?

取决于所面向的用户,C++可以自动做大量的事情,如变量自动调用构造函数和析构函数,但同时也使得静态检查变得困难

2.Ubuntu下如何编译C程序

g++ hello.cc -o hello

./hello

说明:hello.cc为程序的源代码

         hello为输出的文件

3.获取Unix帮助

man subject(subject 为要查询的函数)

4.C程序中代码主题部分一般会有如下语句

return 0;

词段代码表示如果程序正常退出,则返回Status=0

非0的Status表明程序有错误,返回的值越大,说明错误越严重

5.代码调试时日志“null effect”的警告信息,表明代码中存在编写正确但是没有起作用的语句

6.代码

#include<stdio.h>

main()

{

float a;

a=1/3;

printf("a =%f",a);

}

代码输出结果为0.0000,与真正的值存在较大差异,这涉及到除法运算,1/3,由于1和3都为int型数据,所以先进行整数的除法,输出结果为0,然后在进行类型转换,变为float

型数据0.0000,输出,如果想要输出正确的值,应该写为:

a=1.0/3.0;

这样就能输出正确的结果了。这在涉及到整数和浮点数的混合运算时尤其需要注意

此已看到第四章,在这四章中,真正对未毕业或者刚刚毕业的coder们有价值的是第三章,对编码风格的讲解,后续会考虑单独写一篇BLOG对编码规范进行一定的讲解

2012年3月19日

1.数组的声明“int data_list[3];"声明了一个含有3个int型的数组data_list,但是在进行赋值时需要注意的是不能写成“data_list[3]=3;”这是因为C语言中数组的编号是从0开始,这点尤其要注意

2.char name[40];

int main()

{

name = "Sam";

return 0;

}

上面的对字符串赋值的方法是错误的,C语言中不允许把一个数组赋值给另外一个数组,可以通过以下两种方法实现:

a)char name[40]="Sam";

b)strcp(name,"Sam");

3.strcat(String1,String2); 含义是将字符串String2连接到字符串String1的后面

4.fgets(name,sizeof(name),stdin);  从键盘读取字符串的方法,fgets默认包括结束行“\n”的字符串,因此使用strlen来对有fgets输入的字符串的大小时,比实际字符串长度+1

5.C语言对数组的维数没有限制

6. 默认为带 符号类型(signed):

     short int  16位

     ing           16/32

     long int   32

7. 默认类型signed/unsigned有编译器决定:

     char         8

8. float         32位

    double     64位

9.const float PI=3.1415927;

常量必须在初始定义时就对其进行赋值,且在后续的使用中不要进行更改

10.C语言中涉及到自加的运算符++x和x++,在实际编程过程中建议使用++x,同时为了避免在编程时出现问题并且保持简单(KISS原则,Keep It Simple,Stupid),最好将这种自加自减语句单独放在一行

11.避免使用strcmp函数进行字符串的比较

12.switch语句的基本语法:

switch(表达式){

case 常量1:

语句

...

break;

case 常量2:

语句

...

break;

case 常量3:

语句

...

break;

default:

break;

}

switch语句中最好加上default语句,即使这个语句不是必须的,也最好加上词条语句

至此已看到第八章,在这次看的几章中,真正对未毕业或者刚刚毕业的coder们有价值的是第七章,主要讲的是实际工作中程序设计过程的几个步骤,有助于帮助快速适应coder的工作

2013年3月20日

1.预编译的文件主要包括命名的常量、宏和引用文件,预处理器在对其进行编译时指令到其行末就结束了,不像C语言中以分号来表示一段语句的结束,可以在行末加\来表明预编译处理的这一行尚未结束
2.#define MAX 10    正确
  #define MAX = 10  错误
3.#include "**.h"  中的.h文件所在目录可以是相对路径,也可以是绝对路径,但是推荐使用相对路径,这是因为绝对路径可移植性较差
4.包含文件可以存在一定的嵌套,这一特性在使用上时可能会存在一定的问题,例如,假设data.h和io.h中都包含const.h,当把data.h和io.h放到同一个文件中时,就有可能会产生错误,为了避免出现错误,一般会在代码中加入一定的保护,如
#ifndef _CONST_H_INCLUDE_
#def _CONST_H_INCLUDE_
#endif
5.带参数的宏:
#define SQR(x) ((x)*(x))
需要注意的是宏名SQR与"("之间不能有空格,而且宏的参数必须有括号,否则计算结果会出错,例如
#include <stdio.h>
#define SQR(x) (x*x)
int main(){
int a=3;
printf("%d",SQR(a+1));
}
他的输出结果为3+1*3+1=7,而不是我们所预想的16
6.在使用宏时宏中的参数最好不要含有++或--等运算符

7.位运算内容比较简单,只是需要注意">>",但符号位右移后填充的为与“符号位”相同的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值