《C和指针》部分笔记
第一章 快速上手
1.从一个比较简单的程序开始讲解 “从标准输入读取文本并对其进行修改,然后把它写到标准输出”
里面遇到几个有意思的点
int ch;
//思考scanf的返回值
while( num < max && scanf( "%d", &columns[num] ) == 1 && columns[num] >= 0 )
num += 1;
while( (ch = getchar()) != EOF && ch != '\n' ) //为何ch要声明为整型
;
- scanf函数的返回值是函数成功转换并存储与参数中的值的个数。
- getchar函数从标准输入读取一个字符并返回它的值。如果输入中不再存在任何字符,函数就会返回常量EOF,用于提示文件的结尾。
- 为什么ch被声明为一个整型?答案是EOF是一个整型值,它的数位比字符类型(char)要多,把ch声明为整型可以防止从输入读取的字符意外地被解释为EOF。同时,也意味着接收字符的ch必须足够大,足以容纳EOF。
- 补充:字符在本质上也是整型。
- 函数的传值调用和传址调用在后面的章节会讲到,传数组名其实也是传值,因为数组名是一个指针,所以就变成传址了。
第二章 基本概念
1.环境:讲编译、链接、运行。编译环境、运行环境不同,需要交叉编译。
2.词法规则:词法规则就像英语中的拼写规则,决定你在源程序中如何形成单独的字符片段,也就是标记(token)。C的令牌(token):可以是关键字、标识符、常量、字符串值或者是一个符号。
第三章 数据
1.数据类型
graph LR
A[4种基本数据类型] --> B[整型]
A --> C[浮点型]
A --> D[指针]
A --> E[聚合类型]
B --> F[整型字面值]
B --> G[枚举类型 enum声明]
E --> H[数组 结构等]
整型家族:9个
char、signed char、unsigned char;
short int、unsigned short int;
int、unsigned short int;
long int、unsigned long int。
字符串常量的直接值是一个指针
2.typedef:定义新类型的名字(区别#define)
typedef char *ptr_to_char; //把标识符ptr_to_char声明为作为字符指针类型的新名字
ptr_to_char a; //声明a是一个指向字符的指针
3.常量 const关键字
int const *pt1; //可以修改指针本身,但是不能修改指向的值
int * const pt2; //指向整型的常量指针,指针本身不能修改
4.作用域
文件作用域、函数作用域、代码块作用域、原型作用域
原型作用域只适用于在函数原型中声明的参数名,就是在函数声明的参数名。
5.链接属性
6.存储类型
一定要理解作用域、链接属性和存储类型这三者的特点!!
最近很忙,后续再添加吧!!