---------------------------------------------------------------------------------------------------------------------------------
#C语言的构成
一、C语言的结构
1. C语言的注释是/* ... */,而不是// ...,//是C++的单行注释,有的C语言版本也认可。
2. 函数的返回值缺省则为int,而不是void。
3. 函数必须用return来返回,即使void类型也不建议省略。
二、main() 函数的写法与含义
1. main() 的参数和返回值全部省略。但省略写法是一种很不好的习惯。
main() int main(void)
{ {
... 等同于 ...
} }
2. main() 的参数是一种不限个数的写法,argc代表参数的个数,真正的参数是放在argv[]数组里面的。
三、头文件的意义
头文件的作用:
1. 通过头文件来调用库功能;
2. 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误。
头文件的内容:
1. 头文件可以和C程序一样引用其它头文件,可以写预处理块,但不能写语句命令;
2. 可以申明函数,但不可以定义函数;
3. 可以申明常量,但不可以定义变量;
4. 可以“定义”一个宏函数;
5. 结构体的定义、自定义数据类型一般也放在头文件中;
6. #include <filename.h>,编译系统会到C语言固定目录去引用。#include "filename.h",系统一般首先在当前目录查找,然后再去环境指定目录查找。
---------------------------------------------------------------------------------------------------------------------------------
#C语言的变量和数据类型
一、变量定义
1. 不同类型的变量赋值时,小类型的变量可以直接赋给大的,大类型的变量赋给小类型的变量时必须强制转换。
---------------------------------------------------------------------------------------------------------------------------------
#数组
一、数组的定义与赋值
1. 当使用超出范围的值时,编译不出错,但运行会出错。
二、字符数组与字符串
1. 字符数组,完整地说叫字符类型的数组。字符数组不一定是字符串。
2. 字符串是最后一个字符为NULL字符的字符数组。字符串一定是字符数组。
3. 字符数组的长度是固定的,其中的任何一个字符都可以为NULL字符。
4. 字符串只能以NULL结尾,其后的字符便不属于该字符串。
5. strlen()等字符串函数对字符串完全适用,对不是字符串的字符数组不适用。
使用时还应注意:
1. char sArr[] = "sharon";这种方式,编译时会自动在末尾增加一个NULL字符。
2. NULL字符也就是'\0',在ASCII表中排在第一个,用16进制表示为0x00。
3. sizeof()运算符求的是字符数组的长度,而不是字符串长度。
4. strlen()函数求的是字符串长度,而不是字符数组。它不适用于字符串以外的类型。
5. char sArr[] = "sharon";也可以写成char sArr[7] = "sharon";(注意:是7而不是6)。
---------------------------------------------------------------------------------------------------------------------------------
#附带格式的输入与输出
一、常见格式符号
C 用在printf() 函数中时,以双字节字符显示;用在wprintf() 函数中时,以单字节字符显示。
o 以八进制无符号整型输出。
x 以十六进制小写输出。
X 以十六进制大写输出。
e 以科学计数法表示float和double型数据(其中e小写)。
E 以科学计数法表示float和double型数据(其中E大写)。
p 内存地址,以十六进制表示。
S 用在printf() 函数中时,以双字节字符显示;用在wprintf() 函数中时,以单字节字符显示。
---------------------------------------------------------------------------------------------------------------------------------
#指针
一、被赋值的是指针变量还是指针
1. char *ptr = "sharon";并不是将"sharon"赋给*ptr指针,而是先定义一个常量"sharon",这个常量是定义在栈里面,然后将这个常量的地址赋给ptr,而不是*ptr。常量是不能被修改的。
二、不赋值的指针和NULL
1. 未赋值的指针变量是不能被使用的,其地址指向未不能使用的空间。建议定义时如果暂不使用,先赋NULL。为一个指针申请空间时,一定义要判断其是否为空,因为分配内存失败时返回NULL。不仅如此,甚至在使用指针时都应该判断一下是否为空。
三、指针的长度
1. C语言没有提供数组长度的函数,但可以用sizeof()运算符先求数组的总长度,再求出数组类型的长度,二者相除便得到数组的长度。C语言更大的一个遗憾便是,sizeof()对指针变量求值时,结果总是4,这是因为指针变量的内容是地址,地址总是4个字节来表示。
---------------------------------------------------------------------------------------------------------------------------------
#动态分配内存
一、隐蔽的内存泄露
1. 内存分配未成功,却使用了它。
2. 内存分配虽然成功,但是尚未初始化就引用它。
3. 内存分配成功并且已经初始化,但操作越过了内存的边界。
4. 忘记了释放内存,造成内存泄露。
5. 释放了内存却继续使用它。
---------------------------------------------------------------------------------------------------------------------------------
本文详细介绍了C语言的基础知识,包括C语言的结构、main()函数的写法、头文件的作用及内容、变量定义、数组定义与赋值、格式化的输入输出、指针的概念与使用、动态内存分配等内容。
81

被折叠的 条评论
为什么被折叠?



