C语言教学-数据类型与结构篇⑤
本文最后更新于 221 天前,其中的信息可能已经有所发展或是发生改变。

变量说明符

C 语言允许声明变量的时候,加上一些特定的说明符(specifier),为编译器提供变量行为的额外信息。它的主要作用是帮助编译器优化代码,有时会对程序行为产生影响。

const

const说明符表示变量是只读的,不得被修改。

const double PI = 3.14159;
PI = 3; // 报错

对于数组,const表示数组成员不能修改。

const int arr[] = {1, 2, 3, 4};
arr[0] = 5; // 报错

对于指针变量,const有两种写法,含义是不一样的。如果const*前面,表示指针指向的值不可修改。

int p = 1
const int* x = &p;
(*x)++; // 报错

如果const*后面,表示指针包含的地址不可修改。

int p = 1
int* const x = &p;
x++; // 报错

static

static说明符对于全局变量和局部变量有不同的含义。

(1)用于局部变量(位于块作用域内部)。

static用于函数内部声明的局部变量时,表示该变量的值会在函数每次执行后得到保留,下次执行时不会进行初始化,就类似于一个只用于函数内部的全局变量。由于不必每次执行函数时,都对该变量进行初始化,这样可以提高函数的执行速度。

说人话就是我们在块作用域里面,比如说函数体里面定义了一个变量a,每次调用函数的时候他都会在内存中开辟一块区域指定为a,函数调用结束再把这块内存指定清除。而如果我们加了static这个说明符,调用函数完他就不会把这块内存指定清除,下一次直接用。

(2)用于全局变量(位于块作用域外部)。

static用于函数外部声明的全局变量时,表示该变量只用于当前文件,其他源码文件不可以引用该变量,即该变量不会被链接(link)。

extern

extern说明符表示,该变量在其他文件里面声明,没有必要在当前文件里面为它分配空间。通常用来表示,该变量是多个文件共享的。

extern int a;

上面代码中,aextern变量,表示该变量在其他文件里面定义和初始化,当前文件不必为它分配存储空间。

但是,变量声明时,同时进行初始化,extern就会无效。

// extern 无效
extern int i = 0;
// 等同于
int i = 0;

上面代码中,extern对变量初始化的声明是无效的。也就代表分配了内存空间给这个文件的变量i。无效的原因是为了防止多个extern对同一个变量进行多次初始化。都初始化,谁知道选哪个为最终初始化的结果?

被extern的变量在最先开始声明的时候可以不用加extern

比如我有两个文件一个名叫main.c另一个是load.c

main.c

#include "load.h"

extern int a;
load.c

int a=10;

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇