1.4

关键字

关键字 --C语言中本身内置的,无法自己创造数据类型相关:int char float double void short long signed unsigned存储类别相关:auto static extern register控制流相关:if else switch case default for while do break continue goto return结构体、联合体、枚举相关:struct union enum类型定义:typedef常量相关:const volatile其他:sizeof

auto

int main()
{   auto int a = 10;//自动变量,作用于内部,自动于设定时创建,于最后自动销毁,//auto可以省略
	printf("%d\n", a);
	return 0;
}

typedef 对类型进行重命名

typedef unsigned int uint; //typedef将unsigned int 重新命名为uint
int main()
{    unsigned int num1 = 0 ;
     uint num2 = 1 ;  //两种初始化变量的方法效果等价

     return 0;
}

/*struct Node
{   int data;
    struct Node* next; 
};
int main()
{   struct Node n;
    return 0;
}
*/
typedef struct Node//将结构体Node重命名简化为Node,与上注释等价
{   int data;
    struct Node* next; 
}Node;
int main()
{   Node n1;

     return 0;
}

static

1.修饰局部变量2.修饰全局变量3.修饰函数

实例--局部变量

void test() //有void不返回
{
        int a = 1;
	a++;
	printf("%d", a);
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}
//结果十个2,a是局部变量,进入它的范围时重新创建,每次都是从1开始,出它的范围时销毁,下次调用又从1开始

void test()//void意思不需要返回值
{
	static int a = 1;
	a++;
	printf("%d ", a);//static修饰局部变量时,局部变量出作用域不销毁,直至程序结束时候才销毁
	//本质上static修饰局部变量的时候改变了变量的存储位置,存储在静态区,改变了变量的生命周期
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();//调试F10时候想进test函数内部,按F11,进入反汇编观察,发现Line44无汇编代码,即证明执行过程中不会再创建a,会一直使用第一次创建的a,
//过程中监视发现&a的地址一直未发生变化
		i++;
	}
	return 0;
}
结果2到11

关于存储

计算机中的存储设备硬盘:存储速度慢,断电数据不丢失,空间大,价格低内存:RAM,存储速度快,断电数据丢失,空间大,价格低缓存:存储速度快,断电数据丢失,空间小,价格高寄存器:存储速度最快,断电数据丢失,空间小,价格高

内存使用时候会划分区域进行不同使用:栈区、堆区、静态区栈区:局部变量堆区:动态内存管理 malloc/free new/delete calloc/realloc静态区:全局变量、静态变量,变量直至程序最后销毁

浮点数的四舍五入不能用肉眼看到的结果来判断,因为浮点数在计算机中是近似存储的,不是精确存储的 如12.455 在计算机中可能存储为12.45498799

实例--全局变量

源文件1

int g_val = 2025;//全局变量,具有外部链接属性
extern int g_valp;//声明外部变量,但是无法提取到g_valpx,以为它不是全局变量
int main()
{ 
printf("%d\n", g_valp);//2026
return 0;
} 

源文件2

int g_valp = 2026;//全局变量
static int g_valpx = 2026;

//static修饰全局变量,改变了全局变量的链接属性,外部链接属性变为内部链接属性,只能在本文件中使用

实例--函数

源文件1

extern int add(int x,int y);//声明外部函数
int main()
{
	int a = 10;
	int b = 20;
	int sum = add(a, b);
	printf("sum=%d\n", sum);
	return 0;


源文件2

 Add(int x, int y)
{
	return x + y;
}

若Add前加static,改变了函数的链接属性,外部链接属性变为内部链接属性,只能在本文件中使用

寄存器变量 register

int main()

{
	register int a = 10;//寄存器变量,建议将10存储在寄存器中,速度快,但是寄存器有限,不能存储过大的数据
	return 0;//计算器会自动选择存储位置,不一定存储在寄存器中
}

关于define

#define可以定义标识符常量,不是变量,是一个宏,是一个预处理指令,不会分配内存,只是简单的替换

#define NUM 100
int main()
{   printf("%d\n", NUM);
int n = NUM;
printf("%d\n", NUM);
int arr[NUM] = { 0 };//定义数组
	return 0;
}

#define定义宏宏是有参数的,宏定义的时候不会检查参数类型,只是简单的替换宏名字(宏参数,宏参数) 宏体 (参数无类型)

#define ADD(x,y) ((x)+(y))
int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a,b);
	printf("%d\n", c);
	return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-30 21:35
爱蜜莉雅碳劝退测开:裁员裁大动脉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务