`
乱蓬头199303
  • 浏览: 80524 次
文章分类
社区版块
存档分类
最新评论

C语言易混淆关键词详解-const, static, extern, typedef, 声明

阅读更多
摘要: Const Const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能比较好理解, int i = 5; const int *a = &i; *a = 8;   //

Const

Const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能比较好理解,

int i = 5;
const int *a = &i;
*a = 8;   //报错, 只读不能赋值
i = 10;   //OK

Const最有用处的地方是用它来限定函数的形参, 来表明该函数不能修改实参指针所指向的数据. 同上面的理解, 并不表示这个数据是常量, 在函数外是可以修改的. 如void func(const char *)

Const出现的位置也比较让人困惑, c太灵活的坏处

char *p              = "hello";          // 非const指针, 非const数据
const char *p        = "hello";          //非const指针 const数据
char * const p       = "hello";          // const指针,非const数据
const char * const p = "hello";          // const指针,const数据

你可以在头脑里画一条垂直线穿过指针声明中的星号(*)位置,如果const出现在线的左边,指针指向的数据为常量;如果const出现在线的右边,指针本身为常量;如果const在线的两边都出现,二者都是常量

Static

C语言 中,

static 局部变量 , 生存期为这个源程序, 不过作用域仍难是局部

int fun()

{

     static int a = 1;

     a++;

     print('%d',a);

}

只有第一次调用该函数时a会被初始化为1, 后面每次调用a都会增加1, 所以只要程序不结束这个static a是一直存在的
但他是局部变量, 所以在fun函数之外无法访问, 虽然static a 一直存在



static 全局变量

全局变量本身就是静态存储方式, 再加上static, 是改变他的作用域, 即只能本当前文件访问. 而非static 全局变量的作用域为整个源程序

所以对局部变量, static改变的是他的生存期, 而对于全局变量, static改变的是他的作用域
对于c这样用相同关键词, 却用做完全不同的用处, 真是无法理解, 简直是在忽悠用户



static 函数

在c语言中, 函数的默认作用域是全局可见的, 即整个源程序, 你也可以给函数加上个冗余的extern, 来表示其作用域

如果在函数前加上static, 表示将其作用域缩小至本文件, 同于静态全局变量的用法.
此处普遍认为是c语言的设计失误, 不应该默认将作用域设为全局, 容易造成命名空间冲突.



C++ 中

C++中除了C中的用法, 还多了static成员变量, 和static成员函数的用法

表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别, 也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成多少个类的实例, 就可以用到静态数据成员.

在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性. 这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义.

所以对静态成员的引用不需要用对象名, 可以直接使用类名,
静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是由于静态的成员函数没有this指针


原文链接http://click.aliyun.com/m/23314/
分享到:
评论

相关推荐

    c语言字符串函数详解--函数名及源代码整理[借鉴].pdf

    C语言中的字符串处理是编程中常见的任务,涉及一系列的函数来实现字符串的创建、修改、比较和查找等操作。以下是对这些函数的详细解释: 1. `memset(void *dest, int c, size_t count)`:这个函数用于将内存区域`...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile 的使用详解 #### 一、const 的使用 **1. 为什么使用 const** `const` 关键字在 C 和 C++ 编程语言中非常常见,它用来声明一个常量或者指定某个变量的某个方面为不可变。使用...

    c语言const的用法详解

    ### c语言const的用法详解 #### 一、概述 `const`关键字是C语言中的一个非常重要的概念,主要用于声明不可变的变量或指针。它可以帮助程序员更好地控制程序的行为,减少错误的发生,并提高代码的可读性和维护性。...

    const extern static volatile 小结

    ### const extern static volatile 小结 #### 一、Const(常量) `const` 关键字在 C/C++ 语言中用于定义常量,即其值在程序运行期间不可更改的变量。`const` 可以与多种数据类型结合使用,例如 `const int x = 10...

    C语言深度进阶篇-王桂林-v3.pdf 2019年6月最新版本

    《C语言深度进阶篇-王桂林-v3.pdf》是一本介绍C语言高级特性与深入知识点的专业技术书籍。该文档自2016年发布以来,经过多次修订和更新,保持了内容的前沿性和深度。作者王桂林凭借对C语言的深刻理解,带领读者深入...

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    C语言中关键字const、static、volatile、extern、auto、register的用法分析 本文将对C语言中的六个关键字:const、static、volatile、extern、auto、register进行详细的分析和解释。 一、const关键字 Const关键字...

    C语言的教程课件大纲-C语言的教程课件大纲-C语言的教程课件大纲

    C语言编程基础与进阶 第一章:C语言概述 • C语言的历史与特点 • C语言的应用领域(操作系统、嵌入式系统、游戏开发等) • C语言程序的基本结构(main函数、注释、预处理指令) • 第一个C程序:Hello, World! • ...

    嵌入式C语言深入 ----嵌入式C的必须资料

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出关于嵌入式C语言的几个关键知识点,包括变量修饰符(auto, const, register, static, volatile, extern)的使用,以及指针与数组的定义。下面将对这些知识...

    函数指针_extern_typedef_const_static的基本用法

    在C/C++编程语言中,`函数指针`、`extern`、`typedef`、`const`和`static`是五个非常重要的关键字,它们各自有着独特的功能和用途。本篇文章将详细阐述这些概念及其基本用法。 首先,我们来看`函数指针`。函数指针...

    C语言实战105例----很多C的源程序

    在"《C语言实战105例》"这个压缩包中,你将找到一系列关于C语言的实际编程示例,这些例子涵盖了C语言的基础到高级概念,旨在帮助学习者深入理解和掌握C语言的精髓。 1. **基础语法** - 变量声明:了解如何声明不同...

    static和const用法详解

    Static和Const用的详解 static和const是C语言中两个非常重要的关键字,它们在程序设计中扮演着不同的角色。本文将详细介绍static和const的用法和特性。 static static是C语言中的一个存储类型限定符,主要用来...

    C语言主教程六--系统排序

    在IT领域,排序是计算机科学中的基础操作,特别是在编程中,如C语言。"C语言主教程六--系统排序"这个主题聚焦于如何利用C语言实现系统级别的排序算法。在这个教程中,你将学习到如何使用标准库函数`qsort()`来对数据...

    c语言入门Test-7-18.rar

    声明变量时需要指定其类型,而常量则用关键字`const`来定义。 4. **运算符与表达式**:C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。掌握运算符的优先级和结合性对于编写有效的...

    C语言专题精讲篇--笔记汇总.pdf

    理解指针与数组的关系、指针运算、const关键字的使用、强制类型转换、函数传参等概念,对于深入C语言编程至关重要。 4. 复杂表达式与指针高级应用:指针数组、函数指针、typedef的应用能够简化编程模型,并且提升...

    类的static,const,static const,const static成员的初始化

    在 C++ 编程中,static、const、static const 和 const static 是四个常见的概念,但它们的初始化方式却容易弄混淆。下面我们将对这四种成员变量的初始化方式进行总结和解释。 1. 类里的 const 成员初始化 在一个...

    extern,static以及const修饰变量的不同用法

    在C语言中,`extern`、`static` 和 `const` 是三个非常重要的关键字,它们在定义变量时起到不同的作用。本文将深入探讨这三个关键字分别在定义全局变量和局部变量时的不同用法及其效果。 #### 二、全局变量的修饰 ...

Global site tag (gtag.js) - Google Analytics