b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c / c ++静态变量和静态函数

电脑杂谈  发布时间:2020-04-09 09:33:57  来源:网络整理

c   类 static 函数_c语言static函数声明_c   类 static 函数

静态存储分为: 只读数据(READONLY DATA)区域,读写数据(RW DATA)区域,未初始化区域(BSS). 它们是在程序编译和连接阶段确定的,在程序执行阶段不会更改.

动态存储分为堆和栈. 所有程序均在程序执行期间动态分配,并且大小随其动态变化. 从内存管理的实现角度来看,实现了堆使用的链表,而栈则使用了线性存储方法.

堆栈: 堆栈已进出. 在实际操作中,堆栈存储器可以有一个完整的堆栈和一个空的堆栈. 如果是满堆栈,则堆栈指针的当前位置是已使用的堆栈区域;空堆栈的情况是,堆栈指针的当前位置是未使用的堆栈区域,因此在进出堆栈的两种情况下,指针和数据的操作顺序是不同的.

内存泄漏: 申请一块内存,但没有释放它,也没有在程序结束时回收它,这导致其他程序使用通配指针: 指的是已释放的内存指针或重新分配,但指针仍在使用. 为避免使用野生指针,请将内存指针设置为NULL,并在使用程序时确定内存是否为NULL. 如果为空,则认为内存已被释放并且无法访问该内存. 非法释放内存: 原则上,只能释放由malloc(),calloc()或realloc()分配并由返回值返回的内存,否则释放任何其他内存是非法的. 即使存在* p是malloc的指针,对于p1 = p ++c 类 static 函数,此时free(p1)也不合法,但free(p)确实是可能的. 在函数中释放局部变量也是非法的. 在某些情况下,两次释放堆内存也是错误的. 因为free()函数无法释放未分配的堆内存. 程序使用free释放内存后,指针应设置为NULL,并且释放NULL地址没有问题. 堆: 使用new进行分配,免费发布

可用存储区: malloc分配,删除释放堆栈: 由编译器管理的局部变量和函数参数.

全局/静态存储区域: 用于存储静态变量和全局变量的常量区域: 常量存储内存

也就是说,静态修改函数只有一个含义: 告诉编译器我是内部函数,不要随便使用我.

c   类 static 函数_c语言static函数声明_c   类 static 函数

静态变量

静态变量的类型说明符是静态的. 静态变量当然是静态存储方法,但是静态存储方法的数量并不一定是静态变量. 例如,尽管外部变量属于静态存储模式,但它们不一定是静态变量. 必须先通过静态定义它们,然后它们才能成为静态外部变量或静态全局变量.

静态局部变量

静态局部变量属于静态存储方法,具有以下特征:

静态全局变量

在描述全局变量(是整个源程序. 当源程序由多个源文件组成时,非静态全局变量在每个源文件中均有效. 静态全局变量限制了它的范围,也就是说,它仅在定义该变量的源文件中有效,并且不能在同一源程序的其他源文件中使用. 由于静态全局变量的范围仅限于一个源文件,因此它只能由源文件中的函数共享,因此可以避免在其他源文件中引起错误. 从以上分析可以看出,将局部变量更改为静态变量会更改其存储方法,从而更改其寿命. 将全局变量更改为静态变量后,它将更改其范围并限制其使用范围. 因此,静态说明符在不同位置的作用是不同的.

静态功能...

c   类 static 函数_c   类 static 函数_c语言static函数声明

内部函数和外部函数: 当一个源程序由多个源文件组成时,C语言根据该函数是否可以被其他源文件中的函数调用而将其分为内部函数和外部函数.

    static  函数类型  函数名(函数参数表)
          {……}

关键字“ static”被翻译为中文“ static”,因此内部函数也称为静态函数. 但是这里的“静态”的含义不是指存储方法,而是指功能范围仅限于此文件. 使用内部函数的优点是,当不同的人编写不同的函数时,您不必担心定义的函数是否与其他文件中的函数具有相同的名称,因为相同的名称无关紧要.

外部功能

外部函数定义: 在定义函数时,如果未添加关键字“ static”或使用关键字“ extern”,则表示该函数是外部函数:

[extern]函数类型函数名称(函数参数表)

{……}

c   类 static 函数_c   类 static 函数_c语言static函数声明

在调用外部函数时,您需要对其进行解释:

[extern]函数类型函数名称(参数类型表2)[,函数名称2(参数类型表2)...];

[案例]外部功能的应用.

(1)main.c文件

 main()
   {  extern void input(…),process(…),output(…);
    input(…);  process(…);  output(…);
    }

(2)文件subf1.c

 extern  void input(……)                           /*定义外部函数*/
  {……}

c   类 static 函数_c语言static函数声明_c   类 static 函数

(3)文件subf2.c

  ……
  extern  void process(……)                     /*定义外部 函数*/
  {……}

(4)文件subf3.c

  ……
  extern void output(……)                        /*定义外部函数*/
  {……}

类静态数据成员是在编译时创建和初始化的: 存在于创建此类的任何对象之前,并且不属于任何对象,并且非静态类成员变量属于该对象. 类静态数据成员只有一个副本,由所有此类对象共享. 需要特别指出的一点是: 静态数据成员不能在类中初始化(对于要验证的静态静态类常量变量,似乎可以在类外部或main()函数之前定义它们),可以将初始化放置在类中. 类),通常在类之外,并且main()函数在此之前初始化,并且默认情况下初始化为0. 静态数据成员用于定义类的每个对象共有的数据,比全局变量更安全.

类的静态成员函数属于整个类,而不属于对象,并且由类中的所有对象共享. 静态成员可以定义为内联函数. 通常,静态成员函数用于访问同一类中的静态数据成员或全局变量,而不访问非静态成员. 要访问非静态成员,您需要使用对象作为参数,并通过对象名访问对象的非静态成员. 静态成员函数也可以在类外部定义,此时不能用static修改. 静态成员函数存在的原因是什么?它主要用于在创建任何对象之前访问静态数据成员,普通功能无法实现此功能.

使用C ++静态成员和静态成员函数: 静态成员的调用格式: 类名::静态数据成员名,对象名. 静态数据成员名称,对象指针->静态数据成员,对象引用. 静态数据成员(但是,此类中的公共数据成员很少. 本段仅讨论语法,并且不考虑实际使用中的数据封装问题. )静态成员函数的调用格式: 类名::静态成员函数名称,对象名称. 静态成员函数名称,对象指针->静态成员函数名称,对象引​​用. 静态数据成员. 静态成员函数没有此指针,因为它没有与特定对象关联,建议在调用时使用“类名::静态成员函数名”格式. 总之,对于对象,可以通过调用普通类成员函数和普通成员变量来调用静态成员函数和静态成员变量. 由此可见,使用静态成员变量和静态成员函数应在不创建任何对象的情况下调用它们. 对于其应用,请参考设计模式中的Singleton模式.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-169263-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...