C语言 18-变量类型

本文目录

  • 一、变量的作用域
  • 二、变量的存储类型

  说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略。

  C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储。变量也是有分类型的,不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型、生命周期)。

一、变量的作用域

  C语言根据变量作用域的不同,将变量分为局部变量和全局变量。

1.局部变量

1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。

2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

2.全局变量

1> 定义:在所有函数外部定义的变量,称为全局变量。

2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

1 int a;
2
3 int main ()
4 {
5     int b;
6     return 0;
7 }

第1行的变量a是全局变量,第5行的变量b是局部变量。

二、变量的存储类型

* 变量的存储类型就是指变量存储在什么地方。有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。

* C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量。

1.自动变量

1> 定义:自动变量是存储在堆栈中的。

2> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,因为所有的局部变量在默认情况下都是自动变量。

3> 生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。

1 void test(int a, int b) {
2     int c = a + b;
3
4     auto int d;
5 }

第1行的变量a、b,第2行的变量c、第4行的变量d都是自动变量。

2.静态变量

1> 定义:静态变量是存储在静态内存中的,也就是不属于堆栈。

2> 哪些是静态变量:

  • 所有的全局变量都是静态变量
  • 被关键字static修饰的局部变量也是静态变量

3> 生命周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束。

 1 #include <stdio.h>
 2
 3 int a;
 4
 5 void test() {
 6     static int b = 0;
 7     b++;
 8
 9     int c = 0;
10     c++;
11
12     printf("b=%d, c=%d \n", b, c);
13 }
14
15 int main() {
16     int i;
17     // 连续调用3次test函数
18     for (i = 0; i<3; i++) {
19         test();
20     }
21
22     return 0;
23 }

* 第3行的变量a、第6行的变量b都是静态变量,第9行的变量c、第16行的变量i是自动变量。

* 因为第6行的变量b是静态变量,所以它只会被创建一次,而且生命周期会延续到程序结束。因为它只会创建一次,所以第6行代码只会执行一次,下次再调用test函数时,变量b的值不会被重新初始化为0。

* 注意:虽然第6行的变量b是静态变量,但是只改变了它的存储类型(即生命周期),并没有改变它的作用域,变量b还是只能在test函数内部使用。

* 我们在main函数中重复调用test函数3次,输出结果为:

3.寄存器变量

1> 定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)

2> 哪些变量是寄存器变量:

  • 被关键字register修饰的自动变量都是寄存器变量
  • 只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
  • 寄存器变量只限于int、char和指针类型变量使用

3> 生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。

4> 使用注意:

  • 由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理
  • 为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存
1 int main() {
2     register int a;
3     return 0;
4 }

第2行的变量a是个寄存器变量。

时间: 2024-10-29 04:04:49

C语言 18-变量类型的相关文章

C语言之变量类型和存储方式

变量可以分为全局变量.静态全局变量.局部变量和静态局部变量 变量的声明有两种情况: 1.一种是需要建立存储空间的(定义性声明).例如int a 在生命的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的(引用性声明).例如extern int a 其中变量a是在别的文件中定义的. 内存区域的划分: 1.栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值.局部变量等. 2.堆区:程序员向系统申请或释放. 3.全局区:用来保存全局变量和静态变量. 4.文字常量区:用来保存常量字符

如何判断c语言的变量类型

变量三要素: 一个变量有三个基本的要素,变量的名称,变量的类型,变量的值.所以int a = 10; 变量名为a,变量的存储类型为int型,变量的值为10. 变量还有一些属性如作用范围和存储类型. 变量作用范围和存储类型 作用范围有局部变量和全局变量.局部只在特定范围内起作用.全部变量在整个程序运行期间起作用. 存储类型有auto(自动),static(静态),register(寄存器变量) 自动变量auto默认省略,int a = 10; 和 auto int a = 10;是一样的.自动变量

【学习笔记】【C语言】变量类型

根据变量的作用域,可以分为: 1.局部变量: 1> 定义:在函数(代码块)内部定义的变量(包括函数的形参) 2> 作用域:从定义变量的那一行开始,一直到代码块结束 3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收 4> 没有固定的初始值  2.全局变量 1> 定义:在函数外面定义的变量 2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享) 3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁 4&g

golang语言学习第二课:变量类型及常量与枚举

go语言的变量类型: bool (true为0,false不等于0), string int 分好多种int,有点头晕,但用默认的int就足够了,根据机器判断,是32位的用int32,是64位的用int64. byte, 又是uint8的别名. rune(类似char,但是是utf-8编码的char),又是int32的别名. go语言没有float,只有float32, float 64(即使在32位的架构上还是64位) go语言原生支持复数类型,类似python, python也支持复数.go

c语言变量类型

本文目录 一.变量的作用域 二.变量的存储类型 C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 回到顶部 一.变量的作用域 C语言根据变量作用域的不同,将变量分为局部变量和全局变量. 1.局部变量 1> 定义:在函数内部定义的变量,称为局部变量.形式参数也属于局部变量. 2> 作用域:局部变量只在定

C语言——变量类型

局部变量 1> 定义:在函数内部定义的变量,称为局部变量.形式参数也属于局部变量.必须在赋值之后才能用: 2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它. 全局变量 1> 定义:在所有函数外部定义的变量,称为全局变量.默认初始化值0. 2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享. 变量的存储类型 * 变量的存储类型就是指变量存储在什么地方.有3个地方可

【C语言探索之旅】 第二部分第六课:创建你自己的变量类型

0 内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告: 文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量

黑马程序员学习笔记--------C语言变量类型,结构体,枚举

本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 一.变量类型 变量分为全局变量和局部变量. 首先说明一下局部变量的特点 1> 定义:在函数内部定义的变量,称为局部变量.形

C语言中变量存储类型有哪些?

变量的存储类型是C语言的重要组成部分,也是C语言学习的基础.那C语言中变量的存储类型有哪几种呢?在编程过程中又该怎样运用呢?就这一问题,我今天给大家介绍一下!总的来说,C语言中变量的存储类型可以分为四种,他们分别是自动变量.静态变量.外部变量和寄存器变量这四种,他们的说明符依次是:auto.static.extern和register. 一.auto auto称为自动变量. 局部变量是指在函数内部说明的变量(有时也称为自动变量).用关键字auto进行说明,当auto省略时,所有的非全程变量都被认

通过C学Python(1)关于语言、数值类型和变量

强类型语言,不可能出现"程序执行出错后仍可继续执行,并且该错误导致的问题使后续执行可能出现任意行为"这类错误,这类错误的例子,如C里的缓冲区溢出.Jump到错误地址. 弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换.例如C语言中int类型和double类型的隐式转换.(个人认为int型和指针型的自由转换,以及union中的一个int对4个char更能说明问题) 静态类型语言,在编译时就拒绝类型错误导致的问题 动态类型语言,在运行时才报出类型错误 C语言是弱类型.静态类型 pyt