-
输入输出函数《C和指针》
输入输出函数ANSI的标准要求编译器必须支持一组规定的函数,具有规范所要求的接口错误报告void perror(char const *message)#include <erno.h> ==> eron变量,在错误发生之后存储错误信息,库函数失败的时候被设置 1 #include <stdio.h> 2 #include...…
-
高级指针《C和指针》
高级指针并不是所有的都是有用的,部分是为了找乐子指向指针的指针int i;int *pi;int **ppi;ppi = π*ppi = &i;//把三个变量联系起来int ***pppi = &ppi; 间接访问的层数越多,使用的越少高级声明int *f();//返回指针的函数int (*f)();//函数指针int *(*f)();//指向返回指针的函数的指针加入数组int f[];int *f[];int (*f)();//函数指针int f()[];...…
-
预处理器《C和指针》
预处理器预定义的符号__FILE__ 进行编译的源文件名__LINE__ 当前的行数__DATE__ 编译时候的日期__TIME__ 时间__STDC__ 编译器是否遵循ANSI C 1 #include <stdio.h> 2 3 int main(void){ 4 printf("file %s\n", __FILE__)...…
-
结构和联合《C和指针》
结构体和联合聚合数据类型能同时存储超过一个的单独数据,C语言提供了两种,数组和结构。元素数组可以通过下标访问,结构体不能。结构体名不能当成指针来使用结构体属于标量类型,可以作为函数参数,相互之间可以相互赋值结构体声明struct tag{number-list}variable-list; 必须列出所有的成员,就算两个结构体的成员完全一样,最后的结构体也是两种不同的结构体struct { int a; char b; float c;}x;//声明一个结构体struct...…
-
结构体和指针《C和指针》
结构体和指针链表包含数据的独立数据结构的集合,通过链表和指针连接在一起,节点通常是动态分配的,也有数组组成的,但是通过指针遍历单链表每个节点包含有指向下一个节点的指针,最后一个指向NULL只要找到了第一个节点就可以访问后面的节点,可以用一个指针保存第一个指针的地址typedef struct NODE{ struct NODE *link; int value;}Node;在单列表之中插入遍历的时候保存上一个节点的地址把之前的指针改为插入的值,把插入的指针改为下一个节点的地址问...…
-
字符串字符和字节《C和指针》
字符串字符和字节C语言没有专门的显式的字符串类型,常以字符串常量或者存储于字符数组,字符串常量适用于程序不会对他进行修改的情况,其他的字符串必须存储于字符数组或动态分配的内存之中基础 就是一串字符,以一个全为0的NUL字节结尾,因此字符串不能包含NUL字节,NUL字节的长度不包括在字符串的长度之中长度库函数:size_t strlrn(char const *string); size_t定义于stddef.h文件之中,代表无符号整形 注:返回值为无符号数 if(strlen(x) ...…
-
动态内存分配《C和指针》
动态内存分配在使用数组的时候我们有时候不知道需要多大的数组,于是提前申请一个大的数组用来存储数据,但是这回使得大块的内存被浪费malloc和freevoid *malloc(size_t size);void free(void *point);malloc会申请一块内存,实际上有可能比你申请的大一点,如果申请失败。返回NULL,free的参数是NULL或者malloc的返回值在对边界要求严格的机器上,返回的地址会满足要求最严格的数据的地址calloc和reallocvoid *callo...…
-
表达式
表达式隐式类型转化C语言整形算术运算的时候至少是以缺省整形的精度来进行的,表达式中的字符型、短整型在使用前会被转换成整形char a, b, c;a = (-a^b<<1)>>1;算数转化某个操作符的操作数属于不同的类型 转换方式:int => unsigned int => long int => unsigned long int => float => double => long double操作符的属性 操作符的优先...…