常量、宏定义、变量

常量

常量的定义有两种,分别是使用define和const。
格式

#define a 20
const int a = 20

常量:在程序执行期间不会改变的量,可以是任意类型,但是定义之后值不可以改变;
两种定义方式除了格式上的不同之外其他的不同:
1.两者代码生成时被处理的阶段不同,宏定义处理在预编译阶段,而const则是在编译阶段才确定并分配内存;
2.const要有数据类型,宏定义没有数据类型,编译器对宏定义在预编译阶段进行替换,没有类型及安全检查,所以替换过程中可能会出错。

变量

概念
没有固定的值,是可以变化的数,它有名字,有类型,有内存等等。
全局变量
定义在函数体外,程序的所有部分除了其他文件的代码都可以使用,全局变量不受作用域的影响。全局变量的生命周期一直到程序的结束,全局变量是静态存储的方式。
:在一个文件中用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个变量。
局部变量
出现在一个局部作用域内,局限于一个函数内,进入作用域的时候自动生成,离开作用域的时候自动消失,如果不想让其消失,想让它返回这个值,那么就要定义成static或者动态申请内存,这样函数结束返回时才不会释放那块空间。
寄存器变量
它也是一种局部变量,register来修饰,实现快速访问,存放在寄存器中。
静态变量
修饰词是static,可以作用于变量与函数,分为静态全局变量、静态局部变量和静态函数。
静态变量的生命周期是跟程序的生命周期一样的,程序结束之后操作系统会回收空间。
静态变量属于静态存储方式,到那时属于静态存储方式的并不一样是静态变量,例如外部变量属于静态存储方式,但不一定是静态变量。
定义在类内的静态变量不再是类的对象,而是被类拥有,sizeof()的值中不在计算静态变量的大小。

静态局部变量
局部变量前加上关键字static,静态局部变量被初始化一次,下次使用依据上一次保存的值。
特点:1.生存周期为整个源程序,但是只能是定义该变量的函数使用该变量;
2.允许对构造类静态局部变量赋值,如未赋值,系统自动赋值为0;
3.基本类型的静态局部变量,未赋值系统自动赋值为0;
注:静态局部变量是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了上次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。
静态全局变量
全局变量同样也是只初始化一次,作用域是整个源程序,只在定义此变量的源文件中可用,在其他源文件中不可。
注:非静态的全局变量在源程序是所有源文件中都是可用的。

static函数

static函数的作用域只在定义它的本文件中,如果只想在源文件中调用,应说明为static。
**内部函数和外部函数:**一个程序由多个源文件组成时,C语言根据能否被其他源文件调用来分为内部函数和外部函数,不能调用的是内部函数,能的是外部函数;
**内部函数:**又称为静态函数,格式:static 函数类型 函数名…
**外部函数:**没有加static或者加了extern的函数。
static函数和普通函数的区别:
1.静态函数在整个内存中只有一份,但是普通函数调用一次就有一份,可以多份;
2.在类中静态成员函数不需要类的对象调用,可以直接调用;

#include<iostream>
using namespace std;
class A
{
public:
	static void test01()
	{
		cout << "你好!" << endl;
	}
};
int main(void)
{
	A::test01();
}

运行结果:

**注:**静态成员函数只能访问静态成员变量。

类的static函数
1.静态成员数据只能被定义一次,而且要被同类的所有对象共享,不可以在类中对它初始化,也不能在构造函数中初始化,因为静态数据成员为每个类共享,每创建一个类的对象它都要被初始化;
2.静态成员的值对所有对象是一样的,可以在类外进行初始化;
3.它在对象中不占有空间,它属于整个类共有;
4.静态成员函数访问非静态数据时要通过参数传递的方式得到一个对象名,然后通过对象名来访问。;

#include<iostream>
using namespace std;
class A
{
public:
	int a=3;
	static int b ;
	static void test01(A n)
	{
		n.a = 4;
		cout << n.a << endl;
	}
};
int main(void)
{
	A m;
	cout << m.a << endl;
	A::test01(m);
}

运行结果:

参考文章:
https://blog.csdn.net/zcyzsy/article/details/52207085?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164769442116780255294855%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164769442116780255294855&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-3-52207085.142v2pc_search_result_cache,143v4control&utm_term=c%2B%2B%E5%8F%98%E9%87%8F%E5%92%8C%E5%B8%B8%E9%87%8F%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值