c/c++(2)

如题所述

第1个回答  2022-07-06

1、全局静态变量、局部静态变量

2、静态函数。只能在 本源文件 中使用

3、c++中,static关键字可以定义 类 中的静态成员变量。类中static静态数据成员拥有一块独立的单独存储区,而不管创建了多少个该类的对象。这些对象共享这一块静态存储区。

4、c++中,static关键字可以定义 类 中的静态成员函数。静态成员函数也是类的一部分,而不是对象的一部分。这些对象共享这一块静态存储区

1、数组是用来存储多个相同类型的集合。数组名是首元素的地址。

2、指针相当一个变量,它存放的是其他变量在内存中地址。指针名只想内存的首地址。

区别:
1、赋值

2、存储方式:

数组:连续存放、连续内存。不是在静态区就是在栈上。

指针:灵活、内存空间不确定。

3、初始化

4、指针操作

数组名的指针操作:

定义:指向函数的指针。

应用:回调

c语言:全局或者静态变量,初始化发生在任何代码执行之前,属于编译期初始化。

c++:全局或者静态对象当且仅当对象首次用到时才进行构造。

解析:

作用域 :C++里作用域可分为6种: 全局 , 局部 , 类,语句 , 命名空间 和 文件作用域 。

静态全局变量 :全局作用域+文件作用域,所以无法在其他文件中使用。

静态局部变量 :局部作用域,只被初始化一次,直到程序结束。

静态局部变量 :局部作用域,只被初始化一次,直到程序结束

生命周期 :静态全局变量、静态局部变量都在静态存储区,直到程序结束才会回收内存。类静态成员变量在静态存储区,当超出类作用域时回收内存。

答:能。

原因: 因为在 编译时对象 就绑定了 函数地址 ,和指针空不空没关系。

定义 : 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

产生原因 : 释放内存后指针不及时置空(野指针),依然指向了该内存,那么可能出现非法访问的错误。这些我们都要注意避免。

避免办法:

1、初始化置为NULL;

2、申请内存判空;

3、指针释放后置空;

4、使用智能指针;

1、首先从作用域考虑 :C++里作用域可分为6种: 全局 , 局部 , 类 , 语句 , 命名空间 和 文件 作用域。

全局变量 :全局作用域,可以通过 extern 作用于其他非 定义的源文件

静态全局变量 :全局作用域+文件作用域,所以 无法在其他 文件中使用。

局部变量 :局部作用域,比如函数的参数,函数内的局部变量等等。

静态局部变量 :局部作用域,只被 初始化一次,直到程序结束

2、从所在空间考虑 :除了 局部变量在栈上 外,其他都在静态存储区。因为静态变量都在静态存储区,所以下次调用函数的时候还是能取到原来的值。

3、生命周期 : 局部变量在栈上,出了作用域就回收内存 ;而全局变量、静态全局变量、静态局部变量都在静 态存储区,直到程序结束才会回收内存。

区别:

1、宏不是函数 ,省去压栈退栈过程,提高效率。 内联函数本质是一个函数 , 并且内联函数本身不能直接调用自身。

2、 宏函数 是在预编译的时候把所有的宏名用宏体来替换,简单的说就是字符串替换。 而内联函数 则是在编译的时候进行代码插入,编译器会在每处调用内联函数的地方直接把内联函数的内容展开,这样可以省去函数的调用的开销,提高效率。

3、 宏定义 是没有类型检查的,无论对还是错都是直接替换; 而内联函数 在编译的时候会进行类型的检查,内联函数满足函数的性质,比如有返回值、参数列表等。

1、赋值顺序不同 :++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。

2、效率不同 :后置++执行速度比前置的慢

3、 i++ 不能作为左值,而++i 可以

4、 两者都不是原子操作

相似回答