`

C/C++ static

 
阅读更多

C中static作用

1. 限定变量和函数的作用域  限定为本文件中 对外不可见

C 语言中为加 static 前缀的全局变量和函数具有全局可见性, 在其他的源文件中也能访问

a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的

//a.c
char a = 'A'; // global variable

void msg()
{
printf("Hello\n");
}

//main.c
int main(void)
{
extern char a; // extern variable must be declared before use
printf("%c ", a);
(void)msg();
return 0;
}

 结果是:

  A Hello

2.static变量存放在静态存储区,所以它具备持久性 即仅仅初始化一次

#include <stdio.h>
int fun(void){
static int count = 10; // 事实上此赋值语句从来没有执行过
return count--;
}
int count = 1;
int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= 10; ++count)
printf("%d\t\t%d\n", count, fun());
return 0;
}

  结果:

 global local static

1  10
2   9
3   8
4   7
5   6
6   5
7   4
8   3
9   2
10  1

 

 3.static的第三个作用是默认初始化为0.其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。

在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加‘\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是‘\0’。不妨做个小实验验证一下。

#include <stdio.h>
int a;
int main(void)
{
int i;
static char str[10];
printf("integer: %d; string: (begin)%s(end)", a, str);
return 0;
}

程序的运行结果如下integer: 0; string: (begin)(end)

 

 

C++中

静态数据成员/成员函数

 

C+ +重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象 这是与普通成员函数的最大区别,

 因为它是对整个类来说是唯一的 

 

分享到:
评论

相关推荐

    C/C++static详解

    C/C++ static详解 static 关键字是 C 和 C++ 中都存在的关键字,它主要有三种使用方式,其中前两种只在 C 语言中使用,第三种在 C++ 中使用(C 和 C++ 中具体微妙操作不尽相同,本文以 C++ 为准)。 局部静态变量 ...

    MinGW-w64 C/C++/Fortran Compiler

    MinGW-w64 是一个为 Windows 平台提供开源 GCC 编译器的项目,它支持 C、C++ 和 Fortran 语言。这个工具链专为64位和32位Windows系统设计,允许开发者在Windows环境下编写和编译原生的Windows应用程序。MinGW-w64 的...

    高质量C/C++编程指南

    《高质量C/C++编程指南》是由上海贝尔实验室的著名计算机科学家林锐博士撰写的一部深度解析C/C++编程技巧和最佳实践的文档。这部指南旨在帮助程序员避免常见错误,提升代码质量和可维护性,深入理解语言的核心概念。...

    C/C++中static作用

    ### C/C++中static作用深度解析 在C/C++编程语言中,`static`关键字扮演着多重角色,根据上下文的不同,它具有不同的含义和功能。`static`关键字主要用于控制变量和函数的作用域以及生存期,尤其在面向过程和面向...

    c/c++笔试 c/c++ 笔试 c C++

    《深入理解C/C++笔试:聚焦static关键字》 在C/C++编程中,`static`关键字扮演着重要的角色,尤其在笔试题目中,对它的理解是必不可少的。本篇文章将详细解析`static`关键字的三种主要用法及其特性,帮助读者深入...

    android NDK入门篇----混合使用java和c/c++代码 源码工程

    在Android开发中,NDK(Native Development Kit)是一个重要的工具集,它允许开发者使用C/C++语言编写部分或全部应用程序,以实现高性能计算或者利用已有的C/C++库。本项目是一个关于Android NDK入门的实例,展示了...

    C/C++面试大全 华为面试

    - `static`关键字在C/C++中有多种用途,可以用来修饰变量或函数。 - 示例: - `static int a;` —— 具有静态存储期的局部变量 - `static void func() { ... }` —— 具有静态存储期的函数 - **注意点**: - 当...

    高质量的c语言/c++编程

    《高质量的C语言/C++编程》是一本针对C和C++程序员提升编程质量的专业书籍,旨在帮助程序员理解和避免常见的编程错误,从而编写出更高效、更健壮的代码。本书内容涵盖了许多重要的编程实践和规范,以下是其中部分...

    使用C/C++实现Java的Native方法接口(JNI)/ JNI编程(C/C++) 代码实例

    JNI在许多场景下非常有用,比如当需要调用已有的C/C++库、提升性能或者利用硬件特性时。本教程将详细介绍如何使用C/C++实现Java的Native方法接口,并通过代码实例来展示JNI编程的基本步骤。 1. **JNI简介** JNI是...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题25:关键字static在C和C++中的区别 面试题26:C语言的结构体和C++的有什么区别 面试题27:C中的malloc和C++中的new有什么区别 面试题28:C++的引用和C语言的指针有什么区别 第4章 预处理、保留字 4.1 预处理 ...

    java调用C/C++过程

    Java调用C/C++的过程,通常被称为JNI(Java Native Interface),是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于那些需要利用C或C++的高性能特性的Java开发者来说,JNI是一个重要的工具。...

    C/C++笔试题集锦

    《C/C++笔试题集锦》是一份涵盖了广泛C/C++知识的资源,旨在帮助求职者准备相关的技术面试和笔试。这份资料不仅包含了常见的C/C++编程题目,还深入探讨了语言的一些关键概念,如类型转换和对象模型,这对于理解和...

    c/c++面试指南

    - **3.6 C和C++区别**:了解C语言和C++之间的差异,如内存管理、对象导向编程等方面的不同。 **第4章 预处理、const、static** - **4.1 预处理**:理解预处理器指令的作用,如条件编译、宏定义等。 - **4.2 const...

    华为C/C++笔试最全试题

    在C语言中,`static`关键字具有多重用途: 1. **在函数体内**:声明为静态的变量在其所在函数调用过程中保持其值不变,即使函数执行完毕返回后,其值也不会丢失,下次函数再次被调用时,变量将保留上次调用结束时的...

    jni java调用c/c++

    Java 通过 JNI 调用 C/C++ 实现动态库加载 Java Native Interface (JNI) 是 Java虚拟机(JVM)提供的一种接口,允许 Java 代码和本地代码(如 C/C++)之间的交互。通过 JNI,Java 程序可以调用 C/C++ 代码,实现 ...

    C/C++常见面试题

    - **C++中的static**: 在C++中,`static`的功能与C相似,但也有一些扩展。 - 除了上述功能外,`static`还可以用于类的成员变量和成员函数。 - `static`成员变量在整个类的所有实例之间共享同一份拷贝。 - `static...

    java调用C/C++全过程

    ### Java调用C/C++全过程详解 #### 一、引言 随着软件开发技术的不断发展,跨平台的应用程序越来越受到开发者的青睐。Java作为一种典型的跨平台编程语言,因其一次编写到处运行的特点而广受欢迎。然而,Java作为一...

    C/C++关于内存使用

    ### C/C++ 关于内存使用的深入解析 #### 内存使用的重要性 在程序设计领域,内存使用是一项核心技能。无论是哪种编程语言,有效地管理和利用内存能够显著提高程序的性能和稳定性。对于C/C++这样的底层语言而言,...

    Android项目下使用JNI进行C/C++和Java互相调用

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言(如C/C++)的代码进行交互。本项目演示了如何在Android应用中使用JNI,实现C/C++与Java的双向调用。以下是关于这个主题...

    JAVA调用C/C++ DLL文件方法

    JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java ...

Global site tag (gtag.js) - Google Analytics