C语言关键字详解{存储类型关键字(5个)+其它关键字(3个)}

3、存储类型关键字(5个)

auto、extern、register、static、typedef

4、其它关键字(3个)

const、sizeof、volatile

存储类型关键字

auto 声明自动变量

一般在代码块中定义的变量,即局部变量,默认都是auto修饰的,不过一般省略

默认所有变量都是auto吗? 不是,一般用来修饰局部变量

extern 声明变量,在其他文件中声明,也引用变量

extern int g_val =100;//错误的
extern int g_val;      //正确的
/*声明并没有开辟空间!“=100”叫做赋值或者初始化
  所有的变量声明的时候,不能设置初始值
*/

.h头文件中:变量声明必须带上extern

                    函数声明建议带上extern

问题:头文件被重复包含怎么解决?

#pragma once
#ifdef __NAME__
#define __ NAME__



#endif

register 声明存储器变量(寄存器变量不可被寻址,即不可取地址&

尽量将所修饰变量,放在cpu寄存器中,从而达到提高效率的目的

那么什么样的变量可以采用register呢?

1、局部的(全局会导致cpu寄存器被长时间占用)

2、不会被写入的(写入就需要写回内存,后续还要读取检测的话,register的意义在哪呢?)

3、高频被读取的(提高效率所在)

4、如果要使用,请不要大量使用,因为寄存器数量有限

static 声明静态变量(static项目维护,提供安全保证)

1、static修饰全局变量,该变量只在本文件(本.C文件中)内被访问,不能被外部其它文件(其它.C文件)直接访问。(即使使用extern声明也不行),static修饰的全局变量在函数中调用时,第二次使用如果有初始函数,仍然进行初始化,不会保留上次运行结果。可以通过下面的代码验证。

2、static修饰函数,该函数只能在本文件内被访问,不能被外部其它文件直接访问。

局部变量具有局部临时性,函数调用开辟空间并初始化,函数接收释放空间(不用担心自己定义的函数是否会与其他文件的函数同名)

3、static修饰局部变量,更改局部变量的生命周期,即局部变量的生命周期变成全局变量的生命周期

#include <stdio.h>
#include <windows.h>
static int j;

void fun1()
{
	static int i = 0;
	i++;
	printf("fun1:%d\n", i);
}
void fun2()
{
	j = 0;
	j++;
	printf("fun2:%d\n", j);
}
int main()
{
	int k = 0;
	for (k = 0; k < 10; k++)
	{
		fun1();
		fun2();
		Sleep(500);
	}
	system("pause");
	return 0;
}

运行结果:

其它关键字

const 声明只读变量

const修饰的变量,不可以直接被修改,可以通过指针间接被修改

sizeof计算对象所占内存空间大小

sizeof在计算变量所占空间大小时,括号可以省略,而计算数据类型大小时不能省略。

int *p = NULL;
sizeof(p);//值为多少?
sizeof(*p);
int a[100];
sizeof(a);
sizeof(a[100]);
sizeof(&a);
sizeof(&a[0]);
int b[100];
void fun(int b[100])
{
    sizeof(b); //值为多少?
}

volatile说明变量在程序执行中可被隐含地改变

weiwan

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白很低调

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值