关于数组
数组应该可以看做一个常量指针,也就是只能赋值一次。
关于函数指针
通过typedef 类型 (*类型名)(参数列表),可以定义一个函数指针的类型。
定义函数指针的语法很像声明一个函数,只不过要用括号将*和函数名括起来,如:
int (*fun_ptr)(int,int)
对函数指针赋值时可以直接用函数名,也可以对函数名取址后再赋值。
使用函数指针时直接使用,不需要加上*。
关于字符串
c语言中字符串以字符数组的形式存储,同时在结尾处加上一个"\0"。
常用string库函数:
strcpy(s1,s2),复制字符串 s2 到字符串 s1
strcat(s1,s2),连接字符串 s2 到字符串 s1 的末尾
strlen(s),求出字符串s的长度
strcmp(s1,s2),如果 s1 和 s2 是相同的,则返回 0;如果s1<s2则返回小于0;如果 s1>s2 则返回大于 0
strchr(s,ch),返回一个指针,指向字符串s中字符ch第一次出现的位置。
strstr(s1,s2),返回一个指针,指向字符串s1中字符串s2第一次出现的位置。
关于结构体
结构体的标准定义格式为:
struct 结构体名称
{
相关定义
}变量名;
这里有两个地方需要说,结构体名称可以省略,但是在上面情况下需要写明呢?那就是如果你的结构体是嵌套结构体(比如链表节点),那么在内部就需要注明结构体名称。
变量名可以指定一个或者多个,当然不指定也是可以的。
还可以定义位域,注意位域不能跨字节。
关于共用体
用union定义,定义形式和结构体类似。但是他是多个成员共用一个内存空间,其长度由最大成员长度决定。
关于位域
好像有点不懂= =。
关于typedef
给类型起别名,常用于缩短类型和给结构体起别名。
与#define有区别,第一个区别是#define还可以为数值定义别名,第二个区别是typedef是编译器执行的而#define是预编译器执行的。
关于输入与输出
getchar()和putchar(int c),这俩是通过返回值返回单个字符。
gets()和puts(),这俩是通过参数返回。
scanf()和printf(),这俩通过占位符。