一.运算符
/,%,++,--,!=,&&,||,优先级见书;常见:[]()->. > 后置++-- > 前置++-- +-&*~!sizeof() > 类型转换 > 算术运算*\%+-
math.h:floor(x),不大于x的最大整数;fabs(x),|x|;
exp(x),e的x次幂;log(x);log10(x);
pow(x),x的y次幂;sqrt(x)平方根;sin(x);cos(x);tan(x);
二.结构
if else;switch-case;switch(){case 0: ;break;case 1: ;break;....default: ;}
while(){};do{}while();for(;;){}
三.数组
一维数组 int iA[5];或者#define N 5......int iA[N];但不能动态定义引用iA[i];
二维数组列大小定义时不能省略。
四.函数
类型 函数名(行参)
{
参数声明
执行
}
1.有的时候不把声明放前面会报错的。2.函数调用时注意函数声明。
3.变量作用域:局部变量,自动变量(默认),外部变量 extern,静态变量 static(全局),寄存器变量 register(适用于循环)。
4.外部函数extern,内部函数static 区别是局限于本文件。
五.指针(重难点)
32位机指针变量地址4字节即32位
int *p1=0;...if(p1!=0) *p1=200;(编程规范)
指针运算:+或者- 运算p+/-i,计算p指的类型字节数
计算p1-p2结果为p1p2相差字节数除以p1所指类型字节数,p1p2指向相同数据类型
二维数组:行地址:a,a+i1/&a[i1]/&*(a+i1)
列地址:*a,*(a+i1)/a[i1]
指针数组:int *p[3];可以指向二维数组,每个元素是行地址p[i]=a[i];
指向指针的指针:char **ppc;int *p[3];p,ppc就是指向指针的指针。作用:移动指针开销比移动数据小。
指针做函数参数void func(int *p1,int *p2){}间接访问
数组名做函数参数,返回指针值的函数(注意不要返回已释放空间),指向函数的指针(C++虚函数实现机制)
字符串:可以含零个或多个字符;字符串结束标志‘\0’,所以定义数组长度比输入字符串长;scanf输入字符串不能含空格,否则以空格结束字符串;
字符串函数:输出:int puts(const char *pc);完全可以由printf代替;写错误返回-1(EOF),否则返回非负数;
输入:char *gets(char *pc);输入到字符数组中,直到遇到换行符或文档结束符,丢弃换行符或结束符,添加空字符;pc必须是字符数组名或指向字符数组的指针变量;
若成功返回pc,若直接遇见换行符或结束符,返回空指针;输入超过长度,会出现内存写问题;
int strlen(const char *pc);返回第一个‘\0’之前的有效字符个数;
char *strcat(char *pc1,const char *pc2);返回pc1;pc1对应的字符数组应定义足够长度(>=strlen(pc1的)+strlen(pc2的)+1);
char *strcpy(char *pc1,const char *pc2);返回pc1;
int strcmp (const char *pc1,const char *pc2);按照ascii码比较,pc1>pc2时返回正数;
char *strstr(const char *pc1,const char *pc2);查找第一次出现pc2的地址;若不出现返回空指针;
main函数参数int main(int argc,char *argv[]){}
动态空间管理:“stdlib.h"
1.malloc(unsigned int size);
2.calloc(unsigned int num,unsigned int size);开辟字节数num*size;
3.realloc(void *ptr,unsigned int size);重新定义开辟空间;
4.free(void *ptr);free((void *)pf1);简写free(pf1);
检查空间申请是否成功:pv=malloc(10*sizeof(int));if(pv==NULL) exit(0);...