一、static
static用来修饰局部变量,全局变量和函数
局部变量:
#include<stdio.h>
void xyz()
{
static int a = 1;
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10) {
xyz();
i++;
}
return 0;
}
//结果是234567891011
可以看出static修饰a后,a一直存在,出函数后并不销毁,而且不能重新定义赋值
修饰全局变量:使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用
修饰函数:使得函数只能在自己所在源文件使用
二、typedef类型重命名
int main()
{
typedef unsigned int u_int;
unsigned int num = 1;//结果是1
printf("%d\n", num);
u_int b = 1;//结果是1
printf("%d", b);
}
可以看出 typedef unsigned int u_int;可以将unsigned int num这种冗长的定义替换为自定义的定义u_int。
三、define
定义常数:#define MAX 1000
定义宏:
#define ADD(X,Y) X+Y
int main()
{
printf("%d", 4 * ADD(2, 3));//结果是11
return 0;
}
可以看出 ADD(2,3)直接替换为 4*2+3 所以应该注意括号
四、结构体
struct Stu {
char name[20];
int age;
double score;
};
int main()
{
struct Stu s = { "张三",20,85.5 };//结构体的创建和初始化
printf("%s %d %lf\n", s.name, s.age, s.score);
struct Stu* ps = &s;
printf("%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);
printf("%s %d %lf\n", ps->name, ps->age, ps->score);
return 0;
}
在主函数外可建议结构体,面向复杂体,设置多个相关变量
struct 结构体名 变量名 = {.......};//初始化公式
printf("%s %d\n", 变量名.字符变量名, 变量名.整形变量名);//输出方式
也可以取出结构体指针,从而实现多种输出方式
五、指针理论
在32位系统中
0000 0000 0000 0000 0000 0000 0000 0000
.。。。。。。。
1111 1111 1111 1111 1111 1111 1111 1111
共2^32次方个二进制数都可以作为编号,在内存中给予变量一个地址
一个字节是一个内存单元,然后分配地址
int a=10;//a在内存分配4个字节
&a只拿出第一个字节的地址
int* pa=&a;//pa存放地址,*说明pa是指针变量
char* short* int* long*.............大小都是4个字节