数据类型2
来源:互联网 发布:平板装ubuntu 编辑:程序博客网 时间:2024/05/24 06:08
2.6.1 static
简单来说static修饰变量,就是指该变量空间独立于函数中的auto变量或者栈变量,static变量空间在内存中的静态区分配。
1.修饰局部变量
在用static修饰局部变量后,该变量值在初次运行时进行初始化工作,且只进行一次。
#include<stdio.h>
void fun()
{
static int a=1;a++;
printf("%d\n",a);
}
int main(void)
{
fun();
fun();
return 0;
} 程序执行的结果为 2 3
说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.
对于静态局部变量如果没有进行初始化的话,对于整型变量系统会自动对其赋值为0,对于字符数组,会自动赋值为“\0”
2.修饰全局变量
对于一个全局变量,它既可以在本源文件中被访问,也可以在同一个工程的其他源文件中被访问(extern进行声明即可)
(1)file1.c
int a=1;
(2)file2.c
#include<stdio.h>
extern int a;
int main(void)
{
printf("%d\",a)
return 0;
} 执行结果为 1
但是如果在file1.c中吧“int a=1”改为“static int a=1”,那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。
3.修饰函数
用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。
2.6.2 extern
extern可以修饰变量和函数,表示该变量或者函数在其他地方被定义,在这里声明使用它,这样多个源文件共享变量和函数。
1.extern变量名
在任何函数体外声明或定义变量时,不加extern可能是定义也可能是声明,编译器选择初始化的那个(最多一个地方对它进行丁初始化),如果没有初始化则任选其中一个作为定义,其他为声明,但是加extern肯定是声明如果不想让其他源文件链接到,则需要使用static
关键字。
在函数体内声明(注意是声明,在函数体内部不能定义外部变量)使用其他源文件中定义的变量时,必须使用extern关键字,因为在函数体内默认为局部变量。
2.extern函数
函数默认是外部的(在函数体内或函数体外声明一个外部函数,extern关键字均可省略),如果不想让其他源文件链接到,在函数前加static关键字。
前面提到过,编译器并不检查多个源文件共享的变量的类型是否一致,那么下面的代码是合法的。
char a[]="hello";
int mian()
{
extern int a;
printf("%x\n",a)
return 0;
}
同样,多个源文件共享函数,编译器也不会对外部函数的参数类型、参数个数和返回值类型进行检查,只要函数名相同即可。
int echo (int x)
{
return x;
}
int main()
{
extern int echo(char);
printf("%d\n",echo(255));
rentrn 0;
}
2.7 const
const是constant的简写,表示海枯石烂,恒定不变,一旦相伴,永不变"心"。只要一个变量前面用const来修辞,就意味着该变量里的数据可以被访问,不能被修改。我们其实还可以给它起个更雅的名字——readonly.
例如:
const int a=10;去掉类型int变成“const a=10”,a的值不变。
2.8 auto
auto关键字在我们写的代码里几乎看不到,但又是无处不在的。在c代码中会出现大量的函数模块,每个模块都有其生命周期,在函数生命周期中声明的变量通常叫做局部变量,也叫做自动变量。
例如:
int fun()
{
int a=10; //auto int a=10;
//do something
return 0;
}
意味着当前变量的作用域为当前函数或代码段的局部变量,意味着当前变量会在内存栈上进行分配。
- 数据类型2
- 2-数据类型
- 数据类型2
- Oracle数据类型2
- Windows数据类型(2)
- 复习笔记-数据类型2
- 2数据类型-引用类型
- MYSQL数据类型笔记2
- JAVA复习 2数据类型
- MySQL数据类型2
- mysql数据类型2
- ActionScript3-2复杂数据类型
- C++基础2 数据类型
- 2 Swift数据类型
- 2Java常用数据类型
- C语言 数据类型2
- Python数据类型 -- 列表2
- oracle数据类型-2
- Ubuntu16.04如何安装kaldi
- 很菜很菜的一个C#课程设计实验
- UITextFieldDelegate协议中各个方法的作用与Xcode中AppDelegate.m中自动生成各个方法的作用(iOS)
- 《C++ primer plus》附录G:STL方法与函数(三) 学习笔记
- mysql外连接的总结
- 数据类型2
- Core Components of pyxley (pyxley之核心组成部分)
- Android系统应用不支持读写存储
- C++实验4:星号符
- 树形控件Tree Control
- 第二本书unit3
- 鸣人的影分身
- 关于使用badboy录制jmeter时报脚本错误的解决方法
- opencv 手动画轮廓 生成掩膜