首页 > 编程知识 正文

c++三大特性的理解,总结自己的关键词都有啥

时间:2023-05-04 03:11:24 阅读:119098 作者:2471

前言static关键词非常容易使用,特别是初期,C语言来说,就是靠static关键字完成封装性滴常见的大型项目中,static使用得非常多,static关键词也是面试时的热门关键词之一在c中,static关键字有很多类,因此学习非常重要,因为除了c语言外,还扩展了类成员用static关键字限定的能力。

前言1.c语言中的静态关键字0(c的静态关键字的名称理解1 ) c的静态关键字的两个作用2 ) c的静态修饰全局变量和修饰函数3 ) c的静态修饰局部变量4 ) c的静态关键字

一. c语言中的静态关键字0 ) c的静态关键字的名称理解

静态关键字,有人说他名字不好吗? 因为静态翻译成中文有安静的意思。 但是,对于使用static关键字来说,一点也不安静,重要的是修饰全局变量和函数,使此全局变量和函数只能在此文件中使用。 修饰不能直接的跨文件使用局部变量,使该变量的声明周期变长、躁动,强制改变他人的动作。

但是,我觉得那个确实很适合安静的名字。 限定全局变量和函数时,如果不能直接在文件之间使用,则只能在此文件中使用。 这表示全局变量和函数安静地位于此文件中,无法访问其他文件。

想想这个关键字的名字也很有趣。

1 ) c的静态关键字的两个作用在c语言中,静态关键字有两个作用:1.修饰变量,2 .修饰函数。

修饰变量有两种:第一个修饰全局变量和第二个修饰局部变量。 全局变量限定为只能在此文件中访问,并允许在不能直接的文件之间访问。 (注意直接)修饰局部变量,延长该局部变量的宣言周期,不要超出范围后放弃。 修饰函数。 限定函数后,只能在此文件中访问。不能直接的跨文件访问。 (直接注意)下面,让我们详细讨论一下如何理解两个词。

2 ) c的静态修饰全局变量和修饰函数satic关键字修饰全局变量和修饰函数的作用相同,可以一起讨论不能够直接跨文件访问,限制他们只能在本文件访问。

首先,创建两个. c文件。 一个是main.c,另一个是test.c; 文件名不重要。 名称不同,后缀可以是. c文件。

我在这里做一些事。 写在test.c文件中。 下一句。

//test.c文件的内容int i=10; //全球遍历I在main.c文件中写下一句。

询问//main.c文件的内容。请问,当我编译运行时候,是否可以成功运行上面的程序?

a :不能。 因为变量I是未定义的。 查看编译器的错误信息。

我继续问一下。我明明在test.c文件中定义了int i = 10;为什么在 main.c文件中不能够访问?如何才能使得main.c文件能够访问到 test.c文件中的 i 呢?

答:首先,无法在main.c文件中访问test.c文件的原因很简单。 很明显,编译器不知道I,因为编译会单独编译每个. c文件。 所以报告错误。 要使编译器识别I,请在主. c文件中输入I,即扩展输入I; 这样,编译器就可以在识别I的同时,在链接阶段链接test.c文件中的I,并访问main.c文件中test.c文件中的全局变量I。

也就是说,我在main.c文件中添加了extren int i语句,然后:

# includestdio.hextern int i; //声明全局变量int main () printf ) ' %dn ',I )。 //声明后,可以正常访问。 该test.c的全局变量i=20; 返回0; }上诉编译没有报告错误,并访问了现在可以成功访问的其他文件的test.c变量I,即在main.c文件中访问了test.c文件的变量I。

如果我有需求的话,那就是我不希望我的全局变量 i 能够被其他文件访问,即我就想我的全局变量 i就只能在本文件中访问,可以吗? 当然,它是我们的静态关键字的作用,它限定全局变量,使该全局变量无法在文件之间访问。 也就是说,test.c文件中的全局变量I在main.c文件中不可用。

所以,在test.c中添加关键字static来修饰int i 20; 添加的test.c文件如下:

添加了静态关键字的test.c文件static int i; 在main.c文件中访问test.c文件中的全局变量I,看看会发生什么。

是的,无法分析的外部命令报告了错误。 这是

链接时候,没有在main函数找到 变量 i,是因为我用static修饰了 test.c文件中的变量 i,使得该变量i,只能在test.c文件使用。

其实static,修饰函数也是和修饰全局变量一个道理,我们在 test.c文件中添加一个static 修饰的函数,去掉刚刚的 static int i;

//static int i;static void show() //在test.c中用static修饰的函数{printf("!!!!!!!!!!!");}

我们在 main.c中也声明该函数,于此同时调用该函数,看看是否成功?

很明显,也是调用失败的,说明static修饰函数也可以使得该函数,不能直接够跨文件访问

但是,有一点很重要虽然,我们知道,static修饰的全局变量和全局函数不能够被跨文件访问,但是,他们却可以间接的跨文件访问.朋友门可以自行验证。

比如我提供一个非 static修饰的函数,落寞的早晨调用了 static修饰的函数,那么,我们就可以跨文件访问没有被 static 修饰的函数,从而间接访问 static 修饰的函数。

这也很好的体现了一种封装性,由于 static修饰函数,直能服务于本文件的,那么该函数接口就不会暴露出去,说明该函数相对有隐私一点,类似C++中,类的private。

3) C的static修饰局部变量

相信大家都了解static这个功能,修饰局部变量能够使得该局部变量不用出了作用域就直接直接销毁,而是能够继续存活下来,存活到整个程序从头到尾运行结束后,它才会销毁,这也说明static修饰的局部变量,当中值发生了改变,出了作用域也会保留该值。

static修饰局部变量,该局部变量是在编译期间就确定好值的了,所以必须初始化,不用等到运行时候才分配内存。

朋友们可以自行在 main.c数中定义一个局部变量,用static修饰,并且在static修饰的局部变量打一个断点,运行时候,你会发现,这个断点被跳过了,直接说明该static修饰的语句,在程序运行时候,不执行,但你监视它的值,确实存在,也就说明,该static修饰的局部变量,编译时候就确定初始值,运行时候就不执行该static修饰的局部变量啦。

4) C的static关键字总结

C 的 static 关键字修饰全局变量和修饰函数,使得该函数不能够直接的跨文件访问,但是能够间接的访问;
C 的 static 关键字修饰局部变量,该局部变量必须初始化,编译期间确定初始值,并且该局部变量的声明周期得以延长,不至于出作用域就销毁,知道程序运行结束才销毁。

二. C++中的static关键字

在C++上,由于多了类,所以C++中的关键字,不仅仅是用来修饰全局变量和函数,局部变量的,还会在此基础上(C++中static 修饰全局函数和修饰函数,局部变量依旧是一样的功能),增加了对类中 成员变量,成员函数的修饰。

其实我之前有篇文章就是关于C++中static修饰类的成员说明:static修饰类中的成员,在这里我就不多赘述啦。

三.static在C和C++的区别和相同

相同:

他们无论在C还是C++都修饰全局变量和局部变量和函数都是一样的。

区别:
3. 在C++中多了类,在类中,static修饰的成员变量只能类内声明,类外初始化,不向C中修饰变量,直接需要初始化,
4. 在C++中static修饰成员函数,该成员函数,只能使用static修饰的变量,不像C语言中的static修饰函数,可以在static函数里面使用任何类型的变量。
5. 在C++中,static修饰的成员(变量和函数),都是只保留一份,并且跟随对象的,就算你创建几百个对象,这里的static成员也就是一份数据。无论你在哪个对象改变了static成员的数据,在其他对象的static成员数据也会改变,因为就一份static的数据。

四. 总结

static关键字有超级多妙用的方法,这里只是简单的说明一下,如何正确的使用static关键字,帮助大家阅读static关键字的作用,等以后见多别人代码,用到static关键字,你就知道如何使用了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。