1. if()...
else if()... //当满足if的条件时将不再对else if进行判断和操作
2. 函数之间是平等的,在一个函数内部不能定义其它函数
3. 强制类型转换运算的优先级高于算术运算
4. 八进制前加0
5. int a = 3;
int b = 2;
printf("%f", (float)(a+b) / 2);//输出2.500000
float的优先级高于/,不加括号先将(a+b)转化为%f,再/2
printf("\n%f", (float)((a + b) / 2));//输出2.500000
加括号后先进行(a+b)/2运算,得到2,进而转化为float类型
6.常量不能进行自加自减运算 4++ 是错的
7.不能用变量给数组定义大小int n=10;int a[n];不可
8.%u 格式为 unsigned int
9.全局变量与局部变量重名的情况下,在局部变量的作用范围内全局变量无效,非局部变量的作用范围内局部变量无效,全局变量有效。
10.静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。
静态局部变量是在编译时赋初值的,即只赋初值一次。静态局部变量只能被本函数引用,不能被其他函数引用。
对于全局变量,static的作用只是变量作用域的问题,其内存是在编译时就分配的,所以不加static也是采用静态存储
11.外部变量
1.在一个文件内扩展外部变量的作用域
当在变量定义点之前要引用该变量时,则在引用之前加extern关键字//当然也可把定义放在引用之前
2.将外部变量的作用域扩展到其他文件
在任一文件中定义外部变量,在另一文件中用extern关键字声明
12.变量仅在本文件中使用 static
13.函数
内部函数/静态函数:只能在本文件中调用 前加static
外部函数:在其他文件中可以使用,前加extern
14.编译预处理//在编译之前就进行预处理
1.宏定义
1.1不带参数的宏定义
#define 名字 替换文本
1.2带参数的宏定义
#define 宏名(参数表) 字符串//注意宏名和(参数表)之间不能有空格,否则认为是不带参的宏定义
[注]:对带参的宏展开只是单纯将宏名后面的实参字符串替代#define命令行中的形参
如:#define square(n) n*n
调用时s=square(a+1);//则效果为s=a+1*a+1//注意这里没有括号,函数的意思就已经变了。。。
所以定义宏时最好将 参数和宏体用括号括起来
2.文件包含处理
#include <文件名>/"文件名"
3.条件编译(三种形式)
3.1 #ifdef 标识符//若标识符已被#define定义过,则对1进行编译
程序段1
#else //else可无
程序段2
#endif
3.2 #ifndef 标识符//比第一种多了n,若标识符未被#define定义过,则对1进行编译
程序段1
#else
程序段2
#endif
3.3 #if 常量表达式
程序段1
#else
程序段2
#endif
15.指向函数的指针
类型标识符 (*指针名)();//注意(*指针名)的括号不能省,否则意思会变为返回值为指针类型的函数
函数名也相当于函数的入口地址
16.指向数组的指针是变量
数组名作为数组的首地址是常量
17.16位编译器下int占16位,即2字节
32位编译器下int占32位,即4字节
18.float 4字节 指数方式存储
double 8字节 指数方式存储
结构体变量在分配空间时,以成员变量中数据类型占用字节最多的字节单元数作为 存储单元
char a[10] 按char 1字节对待
当该存储单元中剩余的空间不足以存储下一个成员变量时 开辟新的一整个存储单元
***********结构体在内存中占用的空间*********
19.共用体变量占的内存大小等于所需内在最大的成员所占的内存
20.scanf输入字符串时遇到空格会认为字符串结束
解决方法:
char str1[255];
VC++用gets(str1)输入字符串
VS用gets_s(str1,255);输入包含空格在内的字符串
函数中判断字符串中空格的个数
while(*s!='\0){
if(*s==' ')
num++;
s++;
}
21.注意double类型的格式控制为%lf
22.C语言存放二维数组:行优先
存放二维数组
for(j=0;j<1024;j++)
for(i=0;i<1024;j++)
a[i][j]=0;列下标在外循环,可以保证程序访问内存的局部性,比较好
23#include<math.h>
pow(x,3);///x的立方
fabs(x);//x的绝对值
exp(x);//e的x次方
log10x;
sqrt(x);//x的平方根
24.二维数组做函数参数时,必须指明列数;
因为二维数组在内存中按照行优先存储,如果不指明列数程序无法确认元素的位置
void Func(int array[3][10]);
void Func(int array[][10]);//第一维的长度可以省略,二者合法且等价
但是不能把第二维或者更高维的大小省略
void Func(int array[][]);//不合法!!!
25.文件操作:
fopen("文件名","文件打开方式");//打开文件
FILE *fp;//指向文件的指针变量并不是指向外部介质上的数据文件的开头,
而是指向内存中的文件信息区的开头
fp=fopen("文件
名","文件打开方式");
fclose(fp);//关闭文件
热门工具 换一换