对数组的操作就是对数组元素的操作,不允许对数组整体的操作。
变量是对内存空间的映射,空间在变量就在。
不要以数字命名文件。
C数据类型:
- 基本类型:整型、实型、字符类型char(无字符串)
基本整型的变量所占二进制位数等于cpu的字长
整型:短整型2、整型4、长整型8
实型:单精度型、双精度型
2、构造类型:数组、结构体struct、共用体union、枚举类型enum
3、指针类型
4、空类型 void
5、定义类型typedef
指针变量所占空间为8个字节
表示数据的范围:
基本整型:-214748348~2147483647
有符号短整型:-32768~32767
表示方法:
实型数据不能精确表示零。使用实型数据最好比差度。
每种类型的数据在内存表示的方法:
补码:正数本身、负数取反加一(避免0也有正负)
反码:正数本身、负数取反
Strlen(a):不包括\0,返回字符长度
Sizeof(a):包括\0,返回数组长度,与字符多少无关
转义字符都需要加上“\”
\a蜂鸣器
\b 退格
\d tab跳格
\t纵向跳格
\2跳到当前航的第一列
\f走纸换页,打印机用到
\ddd一到三位八进制数代表的ASCALL码
\xhh表示一到两位十六进制数
字符型数据与整型数据的通用:
Char c; c=’a’ 与c=97效果一样。
符号扩展:高位数按低位数符号填。
指针运算只有在指向数组的前提下才能够进行运算。
且只有相减才有意义。
☆P++修改了p的位置;
p+1没有修改p的位置。
结构体与共用体的区别:
共用体只允许同时用一个,被共用,公用体类型的变量不允许用成员的地址;
结构体允许同时用多个,
指针的基类型指的是指向变量的类型。
枚举类型:这种类型的变量已将所有可取的变量罗列出来且只能从列举的变量中取用。
指针是指针,指针变量不是指针。
变量地址在内存。
指针定义为void,即为万能指针,但万能等于无用。
但你需要什么类型可以将它变为什么类型。
malloc:动态分配内存空间
使用malloc分配地址之后返回值不确定什么类型,这是用到了void。
函数中使用void:
1、return值时使用
2、定义变量时使用
Typedef:给类型名改名;
数据有数据类型和存储类型。
C语言中只能用宏定义定义常量。
在C语言中都是先定义后使用。
类型说明符
printf()函数:向终端输出若干个任意指定类型的数据
“ ”:格式控制字符串
有的字符区分大小写。
Scanf()函数:等待用户从键盘上输入数据,然后按格式控制的要求对数据进行转换后送到相应的变量地址中去。
格式:scanf(“格式控制”,地址表列);
清除输入垃圾:
- Getchar();
- 赋值抑制符
- fflush();
任务:搞清getchar(),getch(),getche()的差别。
getch( )函数和其它两个函数的区别是getch不回显,其它两个函数回显。不回显就是键盘输入什么在屏幕上不显示出来。
getchar( )和其它两个函数的区别是getchar是从缓冲区读取内容,而其它两个是监测键盘输入,也就是说,getchar必须按回车才生效,在按回车之前可以更改。而其它两个函数不行,只要你按了键盘,函数就读取到了内容。
getche( )与getch( )的区别就是getche回显,getch不回显,而与getchar的区别就是一个不需要按回车,一个需要按回车。
Int i与extern int i的区别:
Extern int i;//这是变量声明,是告诉编译器应该到该文件外部去找这个文件的定义
//声明是不分配内存的
int i;//这是变量定义,变量定义是分配空间的
定义只能有一处,但声明可有多处,这些声明所指,都是定义时分配的内存空间
默认初始化与在全局变量、静态变量和局部变量有关。
任务:野指针的危害
1、指向不可访问的地址
危害:触发段错误。
2、指向一个可用的,但是没有明确意义的空间
危害:程序可以正确运行,但通常这种情况下,我们就会认为我们的程序是正确的没有问题的,然而事实上就是有问题存在,所以这样就掩盖了我们程序上的错误。
3、指向一个可用的,而且正在被使用的空间
危害:如果我们对这样一个指针进行解引用,对其所指向的空间内容进行了修改,但是实际上这块空间正在被使用,那么这个时候变量的内容突然被改变,当然就会对程序的运行产生影响,因为我们所使用的变量已经不是我们所想要使用的那个值了。通常这样的程序都会崩溃,或者数据被损坏。
每个进程运行所需的空间称为进程的虚拟地址空间。
32位操作系统中该空间大小为4G。分配方法一在硬盘上开辟虚拟内存空间,二采用软件实现(写时复制),在内存中给每个进程映射。