C语言知识点

1.数据类型
char 字节1 -128~127
short 字节2 -32768~32767
int 字节4 42亿8千万/-21亿~21亿
long 字节4 long long 字节8
float double 优先级高
2.变量
局部变量:在某个函数内,作用域为当前代码块
全局变量:覆盖全局,作用域为整个工程,生命周期是整个程序
static 用来修饰变量和函数
1.修饰局部变量,改变变量的的生命周期,跟随整个程序,作用域未变化
2.修饰全局变量,改变作用域,只在当前文件中生效
3.常量
字面常量 const修饰的常变量
#define 定义的标识符常量 枚举常量
4.转义字符
‘’ 表示字符串内部的双引号
\ 表示反斜杠,防止被解释为一个转义序列符
\t 水平制表符 \v 垂直制表符
5.函数的参数
实参:真实传给函数的参数
形参:形式参数是函数名后的变量,在函数调用之后就被销毁了,只在函数中有效.
形参是实参的一份拷贝,修改形参无法影响实参,通过传指针的方式,间接操作函数外的变量.
6.数组和函数
数组作为函数参数的时候,会隐式转为指针
#pragma once 让头文件对于一个.c文件只能包含一次
switch(必须是整数) case语句中只能写一个整数变量,不能写变量,表达式
while ((ch= getcher()) !=EOF) 一次读一个,到文件读取结束
i++ 返回值为i
goto 语句可用于跳出多层循环
7.移位和指针
左移: num<<1 相当于2
算数右移:左侧补符号位
逻辑右移:左边补0
负数模2,为0或-1
num=num&(num-1); 消灭二进制中的1
int n=0;
10/0; 编译出错
10/n; 运行出错
void * 只告诉地址
指针+1,相当于跳过一个元素
指针相减相当于两个指针之间隔了多少个元素
7.条件操作符和逗号表达式
exp1 ? exp2 :exp3 优先级最低
int c=(a>b,a=b+10,a,b); 从左到右,整个表达式结果为最后一个的结果
整形提升,高位补充符号位0,.
8.字符串
strcpy 拷贝 strcat 拼接
strncpy 拷贝nun个字符串从源字符串到目标空间,若源字符串的长度小于num,
则追加0,直到num个
strstr 查找一个字符串中是否包含另一个,指向第一处被查找字符串中
查找字符串的位置,没找到返回空指针
memcpy 复制num个字节的数据到目标的内存位置,遇到’\0’时并不会停下来
有任何的重叠复制的结果都是未定义的
memmove 可重叠
9.动态内存
malloc (堆)
void malloc (size_t size);
开辟失败,返回一个NULL指针,因此malloc的返回值一定要做检查
int ptr=NULL;
ptr= (int
)malloc(num
sizeof(int));
free(ptr);
free 传入的地址必须是malloc返回的起始地址
ptr=NULL;
calloc
void * calloc (size_t num,size_t size)
函数的功能是为num个大小为size的元素开辟空间,并且把空间的每个字节
初始化为0.
ptr=calloc(10,sizeof(int));
realloc
void * realloc (void
ptr,size_t size);
可能会触发搬运
10.指针
指针数组: int* arr[10];
数组指针: int (*p)[20];
p先和 *结合,说明p是一个指针变量,然后指向的是一个大小为10个整型的数组
&arr是指向整个数组的指针
arr是指向首元素的指针
函数指针数组:
typedef int (*func)();
func arr[10];

你可能感兴趣的:(C语言)