`

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作用 C/C++中static作用

    C/C++static详解

    详细的描述C/C语言的关键字static的作用,及使用时应该注意的事项!

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...

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

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

    c/c++面试指南

    很不错的面试指南~~主要面试的经验~~c/c++基础 预处理 const static 引用 指针 字符串 c++继承多态 数据结构 链表 堆栈 排序关于智力测试

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    华为笔试C/C++

    C/C++ 笔试 面试 1. static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数...

    c/c++笔试题集合

    汇集了知名公司的一些c/c++面试题: 1、关键字static的作用是什么? 2、如何判断一段程序是由c编译程序还是由c++编译程序编译的? 答案:#ifdef cplusplus cout <<"c++"; #else cout <<"c"; #endif 3、大整数数...

    C/C++嵌入式工程师试题

    C/C++嵌入式工程师试题:预处理器(Preprocessor)\死循环(Infinite loops)\数据声明(Data declarations)\Static \Const ... 以及其他一些嵌入式软件的面试题

    C / C++ 各种 面试题 笔试题

    一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, ...

    C/C++静态类和this指针详解及实例代码

    C/C++静态类和this指针详解 1、静态类 C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问。 class CBook{ public: static double price;//需要通过类外来进行初始化 } int main(void){ CBook book;...

    浅谈C/C++中的static与extern关键字的使用详解

    本篇文章是对C/C++中的static与extern关键字的使用进行了详细的分析介绍,需要的朋友参考下

    C_C++问题总结

    C/C++问题总结 1. 关键字 1.1 const 1.1.1 常量 1.1.2 修饰指针 1.1.3 修饰函数参数与返回值 1.1.4 类中的应用 1.2 static 1.3 volatile 1.4 extern 2. 函数 2.1 sizeof与strlen区别 2.2 strcpy、sprintf与memcpy ...

    关于C/C++中static关键字的作用总结

    以下是对C/C++中static关键字的作用进行了总结介绍,需要的朋友可以过来参考下

    C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现

    C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现 写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题] 返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入...

    C/C++面试题+答案

    1. static有什么用途?(请至少说明两种) 限制变量的作用域 设置变量的存储域 对于函数来说static的作用仅限于隐藏; staic变量可以保持变量内容的持久;

    C/C++中的static和extern关键字

    static关键字:static可以用于修饰局部变量以扩展局部变量的生存期。extern关键字:只能用于扩展没有被static关键字修饰的全局变量。

    常见的c/c++面试题目

    这是c c++面试常见的50题,里面包含很多自己容易进入的误区,这个对面试有很大的帮助 例如 指针和数组 c c++ static区别,堆栈的在内存的位置,等等,希望可以对你们带来帮助

    C/C++面试题目及解答.doc

    用C/C++语言写一函数完成该算法,给出复杂度 <br>6.对序列1、1、2、3、5、8、13。。。。 是Fab..数列 2、3、5、13...是Fab..质数数列,因为他们与自己前面的Fab...数列都互质 给出k,返回第k小的...

    c/c++ 学习总结 初学者必备

    (C语言里参数传递都是传值,是一个拷贝,修改指针,只是改变了拷贝的指向,原指针指向并没有改变,而修改指针的内容则是可以的。)如果函数的参数是一个指针,不要指望用该指针去申请动态内存。(即上面所说的修改...

Global site tag (gtag.js) - Google Analytics