C语言备忘录

本文详细介绍了C语言的基础知识,包括C语言的结构、main()函数的写法、头文件的作用及内容、变量定义、数组定义与赋值、格式化的输入输出、指针的概念与使用、动态内存分配等内容。

---------------------------------------------------------------------------------------------------------------------------------

#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. 释放了内存却继续使用它。

 

---------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值