C语言变量的存储类别

合集下载

C中的auto、static、register和extern的区别

C中的auto、static、register和extern的区别

} int A=13,B=-8;
也可以在多文件的程序中声明外部变量。
extern还可声明函数,eg:extern int fun(int a, int b);声明的外部函数可供其他文件调用,在C中,定义函数时省略extern,则隐含为外部函数 另附加一个两个关键字const和volitate
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:
}
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
auto变量:函数中的局部变量,如不专门声明static,一般都是动态地分配存储空间。自动变量:在调用该函数时系统会给他们分配存储空间,一旦函数调用结束这些存储空间就会自动释放。关键字“auto”可以省略,不写则隐含确定为“自动存储类别”,属于动态存储方式。

C语言复习提纲

C语言复习提纲

C语言复习提纲一、基本概念及语法1.C语言的起源和发展历程2.C语言的优点和特点3.C语言的数据类型和变量4.C语言的运算符和表达式5.C语言的程序结构和语句流6.C语言的函数和库函数二、数据类型和变量1.基本数据类型:整型、浮点型、字符型等2.变量的声明和赋值3.变量的作用域和存储类别4.常量的定义和使用5.数据类型转换和类型限定符三、控制流程和循环结构1. 分支结构:if语句、switch语句2. 循环结构:for循环、while循环、do-while循环3. 循环控制语句:break语句、continue语句四、数组和指针2.一维数组和多维数组3.指针的基本概念和运算4.指针和数组的关系5.指针与函数的关系五、函数和递归1.函数的定义和调用2.函数的参数和返回值3.函数的递归调用4.函数的存储类别与作用域5.常见库函数的使用六、字符串和字符处理1.字符串的定义和使用2.字符串的输入输出3.字符串的操作:拼接、复制、比较、查找等4.字符串的处理函数七、结构体和共用体1.结构体的定义和使用2.结构体数组和指针4.结构体与指针的关系八、文件操作1.文件的打开和关闭2.文件的读写操作3.文件的复制、删除和重命名4.文件的定位和截断九、动态内存管理1.动态内存分配和释放2.动态分配数组和结构体3.内存泄露和内存溢出的处理十、预处理器1.预处理器的作用和功能2.宏定义的使用和注意事项3.条件编译和头文件的使用以上为C语言复习提纲,内容涉及C语言的基本概念、语法、数据类型和变量、控制流程和循环结构、数组和指针、函数和递归、字符串和字符处理、结构体和共用体、文件操作、动态内存管理以及预处理器等方面的知识点,帮助学生系统地复习C语言的基础知识。

十分感谢您的提问,希望以上信息对您有所帮助。

C语言函数章节选择题

C语言函数章节选择题

1.在C语言中,全局变量的存储类别是:A) static B) externC) void D) registerA2.C语言中,凡未指定存储类别的局部变量的隐含存储类别是:A) 自动(auto) B) 静态(static)C) 外部(extern) D) 寄存器(register)A3. 在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:________。

A) extern B) registerC) auto D) staticD4. 若有以下调用语句,则正确的fun函数首部是main(){ ∶∶int a;float x;∶∶fun(x,a);∶∶}A) void fun(int m,float x) B) void fun(float a,int x)C) void fun(int m,float x[]) D) void fun(int x,float a)B5. 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4C) 5 D) 有语法错误A6. 以下程序的运行结果是。

#include <stdio.h>main(){ int k=4,m=1,p;p=func(k,m); printf("%d, ",p);p=func(k,m); printf("%d\n",p); }func(int a,int b){ static int m=0,i=2;i+=m+1;m=i+a+b;return m; }A) 8,17, B) 8,17C) 8,8 D) 4,1B7. 函数fun的功能是:根据以下公式计算S,n通过形参传入,n的值大于等于0。

划线处应填________。

1 1 1 1S=1 - ─+ ─- ─+ …───3 5 7 2n-1float fun(int n){ float s=0.0,w,f=-1.0;int i=0;for(i=0;i<=n;i++){________;w=f/(2*i+1);s+=w; }return s; }A) f=1 B) f=-1C) f=-1*f D) f=0C8. 函数fun的功能是:根据以下公式计算并返回S,n通过形参传入,n的值大于等于0。

c语言中变量的存储类别

c语言中变量的存储类别

一.C语言中,从变量的作用域角度来分,可以分为全局变量和局部变量。

二.变量值存在的时间角度来分,可以分为静态存储方式和动态存储方式。

所谓静态存储方式是指在程序运行期间有系统分配固定的存储空间的方式。

而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。

具体包含4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。

1. 自动的(auto)在调用函数时系统会给他们分配存储空间,在函数调用结束时就自动释放这些存储空间,这类局部变量称为自动变量。

2. 静态的(static)为了满足局部变量的值在函数调用结束后不消失而且保留原值,既占用的存储单元不释放,就出现了静态的局部变量,用static来声明的局部变量。

局部变量的特点:(1)相对自动变量(即动态局部变量),在程序的运行期间都占用静态存储区,直到程序结束才释放该存储区。

(2)静态局部变量只是在程序编译时赋初值,以后每次调用时不再重新赋初值,而只是保留上次函数调用结束时的值。

动态局部变量编译时不赋初值,直到程序调用时才给变量赋值,每次调用都要赋初值。

(3)在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时会自动赋初值0或空字符。

而对动态局部变量,不赋初值则它的值是一个不确定的值,因为动态变量每次都要自动分配存储空间,存储空间的值是不固定的。

(4)静态局部变量在函数调用结束后不释放,但其他函数是不能调用的。

3.寄存器的(register)为了提高程序的执行效率,对一些运算频繁的变量定义为寄存器变量可以节省每次程序执行时的内存读取,大大节省了时间,提高了效率。

寄存器的一些特点:(1)寄存器变量的特点程序运行时分配寄存器存储空间,结束时释放。

这个特点限定了只能把局部自动变量和形式参数定义为寄存器变量。

(2)局部静态变量不能定义为寄存器变量。

4. 外部的(extern)外部变量是在函数的外部定义的全局变量,他的作用是从变量的定义初开始,到本程序文件的末尾。

你知道嵌入式C语言中各变量存储的位置吗?

你知道嵌入式C语言中各变量存储的位置吗?

你知道嵌入式C语言中各变量存储的位置吗?
在举行C/C++编程时,需要程序员对内存的了解比较精准。

常常需要操作的内存可分为以下几个类别:
1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局
部变量的值等。

其操作方式类似于数据结构中的栈。

2、堆区(heap)—普通由程序员分配释放,若程序员不释放,程序
结束时可能由OS回收。

注重它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放
在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

4、文字常量区—常量字符串就是放在这里的。

5、程序代码区—存放函数体的二进制代码。

以下是一段实际解释的程序代码:这是一个前辈写的,十分具体。

int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456在常量区,p3在栈上。

static int c =0;全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3
第1页共3页。

C语言变量的声明和空间的分配

C语言变量的声明和空间的分配

无论用什么语言编制的程序,都是为让计算机完成某一特定功能而编写的文本文件。

这些文本文件是不能直接在机器上运行的,它们必须经过系统软件(包括编辑器和编译器)的输入并编译或汇编后,转换成二进制的可执行代码,才是计算机可以识别的机器语言。

此时,程序就是一个包含二进制可执行代码文件的模块。

当内核把二进制的可执行代码装入内存后,它由三部分组成:代码段、数据段、堆栈段。

在线性地址的低地址字段是代码段,存放程序经编译后的可执行代码(程序文本)。

在操作系统中,代码段是只读的,不能修改,所以,代码段的长度是不会改变的。

在程序文本(代码段)的上方是数据段,用来存放程序的变量、字符串和其它数据。

它分为初始化静态数据(data)和未初始化静态数据(BSS。

数据段的长度是可以改变的。

程序可以修改其中的变量。

在程序设计中,将其值可以改变的量称为变量。

每一个变量在内存中都要占据一定的存储单元,因此,每一个变量也就会具有一定的存储属性。

从变量的作用域(空间)的角度来考虑变量的属性,可将变量分为全局变量和局部变量。

局部变量局部变量是指在一个函数内部定义的变量,它只中本函数范围内有效。

说明:1、在主函数中定义的变量只在主函数中有效,且主函数也不能使用其他函数中定义的变量2、在不同函数中可以使用相同名字的变量,它们代表不同的变量,互不干扰;3、形参也是局部变量,也只在对应的函数中有效,其他函数不能使用4、在一函数内部,可在复合语句(有一个{} 括起的一组语句)中定义变量,这些变量只在本复合语句中有效。

全局变量程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。

在函数之外定义的变量称为外部变量(extern ), 也叫全局变量。

全局变量的有效范围是从定义变量的位置开始到本源程序文件结束为止,其关键字extern 可以省略。

说明:1、在一个函数中既可以使用本函数中的局部变量,又可以使用有效的全局变量。

2、设置全局变量的作用是增加函数间数据联系的渠道。

2021年电子科技大学《C语言》自测题答案

2021年电子科技大学《C语言》自测题答案

*欧阳光明*创编 2021.03.07自测题1答案欧阳光明(2021.03.07)一、填空题(每空1分,共29分)1、若有以下的定义:int a [6];则数组a元素的下标的上限为5 ,下限为 0 。

2、局部的变量是在函数内部定义的,它们只在本函数有效。

3、组成C程序的若干函数中,只能且必须有一个主函数。

4、C语言中的变量名可以由字母,数字和下划线三种字符组成,且首字符不能是。

5、枚举类型enum color (bla,blu,gre=3,cya,red)中的枚举项的值bla=__0__、blu=__1__、cya=__4__、red=__5___.6、c语言中变量的存储属性有自动、____静态____、__外部______和寄存器四种。

7、算术运算符,关系运算符,赋值运算符的优先级从低到高依次是赋值运算符,关系运算符,算术运算符。

8、标准文件是系统自动打开和关闭的,但是一般用户文件,必须在程序中用函数_fopen( )_打开文件,文件操作结束后,用__fclose( )_关闭文件。

9、函数参数有形式参数和实际参数两种形式。

10、程序的三种基本结构是顺序结构,选择结构,循环结构。

11、x、y、z均为int型变量,请写出描述“x或y中有一个小于z”的表达式__x<z||y<z_。

12、下面程序的运行结果是: c1=c,c2=abc# include <stdio.h>main( ){char s[10]={“abc”};printf(“c1=%c,c2=%s\n”,s[2],s);}13、如果a=5,b=2,c=3,d=4,则表达式a<b?a:c<d?c:d的值是 3 。

14、设a=6,b=2,表达式a*=a+b运算后a的值为 48 。

15、设x=3.8.,a=9,y=5.3,表达式x+a%2*(int)(x+y)%2/4的值3.8 。

二、选择题(每小题2分,共26分)1、一个C程序的执行是从 AA)本程序的main函数开始,到main函数结束。

C语言复习题库(1)

C语言复习题库(1)

一、填空题(每空 1 分,共20 分)1.程序的三种基本结构为(顺序)、(选择)和(循环)。

2.在C 语言中,用(;)表示语句的结束。

3.语句printf("%%d%d",123);将输出:(“%d123 )。

4.逻辑运算的结果值是(0 )或( 1 )。

5.数组 int a[3][4];共定义了(12 )个数组元素。

6.在 C 语言中,正确的标识符是由(数字、字母、下划线)组成的,且由(字母和下划线)开头的。

7.一个算法应具有的特点有:(有穷性)、(确定性)、有零个或多个输入、有一个或多个输出、有效性。

8.在程序执行过程中,其值不发生改变的量称为(常量),其值可变的量称为(变量)。

9.若有定义:int m=5,y=2;则执行表达式y+=y-=m*=y 后的y 值是(-16 )。

10.在三种正规循环中,当条件表达式的值为(0 )时,就结束循环。

11.C 语言中函数的参数分为(形式参数)和(实际参数)。

12.当函数的数据类型省略时,默认的数据类型为(int 型或者整数型)型。

13.按变量地址访问变量的方法叫(直接访问),通过存放变量地址的变量去访问变量的方法叫(间接访问)。

14.若有定义:int [3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是(0 ),a[2][1]得到的初值是( 6 )。

15.文件包含的一般形式为(#include <文件名> )。

16.宏定义中宏名一般用大写字母表示,容易做到(一改全改)。

17.结构体是一种(构造)数据类型用途是把(不同类型)的数据组合成一个整体。

18.位运算的运算对象只能是(整型)或(字符型)数据,而不可以是其他类型的数据。

19.(文件)是存储在外部介质上数据的集合,是操作系统数据管理的单位。

20.设有“int x=2,y”说明,则逗号表达式“y=x+5,x+y”的值是(9 )。

c语言 变量和常量

c语言 变量和常量
c语言 变量和常量
变量的意义
变量是指可操作的存储区的一块区域。C 语言中每个变量都有指定的类型,这个类型决定了变量存储区的大小和位置分布。
变量命名规则
变量的命名一般由数字、字母和下划线这几种字符组成。但是变量名必须以字母或下划线开头。因为C 语言是大小写敏感的语言,所以大写字母和小写字母代表的意义是不同的 。
几种基本的变量类型如下表
类型
描个整数类型。
int
常用语代表常见整数的单位
float
常用语代表单精度浮点值类型
double
常用语双精度浮点值的类型,比单精度长,准确
void
表示类型的缺失类型,或者无类型
此外C 语言还有其他类型的变量,比如枚举、指针、数组、结构、共用体等。

变量的储存类别(Variable storage class)

变量的储存类别(Variable storage class)

c)函数调用时的现场保护和返回地址等
二、四种储存方法
1、auto变量
函数中的局部变量,如不专门声明为static储存类型,都是动态地分配储存空间的,数据储存在动态储存区中。
2、static声明局部变量
static声明的局部变量的值在函数调用结束后不消失而保留原值,即其占用的储存单元不释放,在下一次改函数调用时,改变量已有值,就是上一次函数调用结束时的值。
2, static local variable declaration
The static local variable declared value at the end of the function call does not disappear and leave, namely the storage unit the occupation does not release, in the next to a function call, change the value, is a function call at the end of the value.
a)在一个文件内声明外部变量。
如果外部变量不在文件的开头定义,其有效的作用范围只限于定义出到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量做“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。
3, the register variable
In general, the value of a variable is stored in memory, when where a variable in a program value, the controller issued a directive to the variable has the value in memory to the ALU. After computing for operation, if the need to save the number, then the data is sent to the memory storage from operator. If the need for frequent storage, can put the value of the local variable is placed in the CPU register.

大一c语言期末考试题库及答案

大一c语言期末考试题库及答案

大一c语言期末考试题库及答案大一C语言期末考试题库及答案一、选择题1. C语言中,以下哪个关键字用于定义一个变量的存储类别?A. intB. charC. staticD. void答案:C2. 在C语言中,以下哪个运算符用于计算两个数的差?A. +B. -C. *D. /答案:B3. 如果一个变量被定义为int a; 那么它的初始值是什么?A. 0B. 1C. 不确定D. -1答案:C二、填空题1. 在C语言中,______是最基本的数据单位。

答案:变量2. 一个C程序总是从______函数开始执行的。

答案:main3. 在C语言中,______关键字用于定义一个函数。

答案:void 或者 int(取决于函数的返回类型)三、简答题1. 简述C语言中数组的定义和初始化方式。

答案:在C语言中,数组定义的一般形式为:类型名数组名[常量表达式],其中类型名是数组元素的数据类型,数组名是数组的标识符,常量表达式是数组中元素的个数。

数组的初始化是在定义数组的同时,给数组元素赋初值。

例如:```cint arr[5] = {1, 2, 3, 4, 5};```2. 描述C语言中指针的概念及其用途。

答案:指针是C语言中一种特殊的变量,它存储的是另一个变量的内存地址。

指针的主要用途包括动态内存分配、数组操作、函数参数的传递等。

指针的使用可以提高程序的灵活性和效率。

四、编程题1. 编写一个C语言程序,实现两个整数的加法,并输出结果。

```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数之和为:%d\n", sum);return 0;}```2. 编写一个C语言程序,实现字符串的复制功能。

C语言中auto,static,register,extern存储类型的用法

C语言中auto,static,register,extern存储类型的用法

在C语言中提供的存储类型说明符有auto,extern,static,register,说明的四种存储类别。

四种存储类别说明符有两种存储期:自动存储期和静态存储期。

其中auto和register对应自动存储期。

具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。

Auto在函数内部定义的变量成为局部变量。

局部变量称为自动变量,这就与使用可选关键字a u t o定义局部变量这一作法保持一致。

局部变量仅由其被定义的模块内部的语句所访问。

换言之,局部变量在自己的代码模块之外是不可知的。

切记:模块以左花括号开始,以右花括号结束。

对于局部变量,要了解的最重要的东西是:它们仅存在于被定义的当前执行代码块中,即局部变量在进入模块时生成,在退出模块时消亡。

定义局部变量的最常见的代码块是函数。

请见以下代码:#include "stdio.h"main(){int i,num;num=2;for (i=0;i<3;i++){ printf("The num equal %d \n",num);num++;{auto int num=1;printf("The internal block num equal %d \n",num);num++;}}}运行的结果为:其实现在都不用打上auto了,编译器默认为auto的不信可以把auto删除试试。

StaticC语言中,存储类型static字面意思很容易把我们导入歧途,其实它的作用有三条,1,隐藏。

这也是最重要的一条。

2,static的第二个作用是保持变量内容的持久。

3,第三个作用是默认初始化为0。

(1)这里就先说第一条,当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

我举例来说明。

我们要同时编译两个源文件,一个是my.c,另一个是main.c。

C语言基础知识归纳

C语言基础知识归纳

C语言基础知识归纳C语言基础知识1.每个C程序有且只有一个主函数main(),且程序必须从main()函数开始执行,并在main()函数中结束。

2.在C语言中,用e来表示科学计数法时,规定在e的前面必须有数字,后面必须为整数。

3.用单引号括起来的一个字符常量只能存放一个字符;C语言中没有字符串变量,只能用字符数组来存储字符串。

4.外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。

5.在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内有效。

6.用sizeof(int)计算int类型数据的字节数。

7.C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。

8.预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。

9.feof函数的作用是检查文件是否结束,当结束时返回的值为非零,否则为零。

10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。

11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。

12.静态局部变量,只有当程序结束后,其值才释放。

13.当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元素的地址。

14.算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入时,其结果相同;算法正确的程序最终一定会结束。

15.在C语言中,预处理命令行都以“#”开头;当需要时才用#include;预处理的作用就是实现宏定义和条件编译。

16.当数组元素的下标超出了定义的下标范围时,系统不给出“下标越界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。

c语言数据的四种存储类型

c语言数据的四种存储类型

c语言数据的四种存储类型标题:C语言数据的四种存储类型详解在深入探讨C语言编程的世界中,数据存储类型是构建程序逻辑的基础元素之一。

它们定义了变量或函数在内存中的生命周期、作用域和可见性。

本文将详细解析C语言中的四种主要数据存储类型:自动存储类型、静态存储类型、寄存器存储类型以及外部存储类型。

1. 自动存储类型(Auto)自动变量是在函数内部声明的局部变量,其存储类型默认为“auto”,虽然在现代C语言中可以省略不写。

这类变量在执行到其声明处时分配空间,当控制权离开该函数时,即函数结束时,系统会自动释放其占用的内存空间,因此得名“自动”。

自动变量的作用域仅限于定义它的代码块内。

例如:cvoid func() {int autoVar; 这是一个自动变量...}在上述代码中,`autoVar` 在`func()` 函数体内声明,当`func()` 执行完毕后,`autoVar` 就不再存在。

2. 静态存储类型(Static)静态变量也是在函数内部声明,但与自动变量不同的是,它具有静态存储持续性,即即使函数结束,其值也不会丢失,下次调用函数时仍然保留上次的值。

此外,静态局部变量的作用域仍限制在声明它的函数内,但在整个程序运行期间始终占据内存空间。

例如:cvoid func() {static int staticVar = 0;staticVar++;printf("staticVar: d\n", staticVar);}每调用一次`func()`,`staticVar` 的值就会加一,因为其存储类型为静态。

3. 寄存器存储类型(Register)寄存器存储类型的变量请求编译器将其存储在CPU的寄存器中以提高访问速度,而非内存中。

然而,并非所有声明为register的变量都能真正被存放在寄存器中,这完全取决于硬件限制和编译器的优化策略。

寄存器变量也具有自动存储期限,即在其所在代码块结束时失效。

at89c51变量类型

at89c51变量类型

at89c51变量类型
AT89C51是一种微控制器,其变量类型取决于编程语言和编译器。

在C语言中,常用的变量类型包括:
1. `char`:字符型变量,用于存储单个字符。

2. `int`:整型变量,用于存储整数。

3. `float`:浮点型变量,用于存储浮点数。

4. `double`:双精度浮点型变量,用于存储双精度浮点数。

5. `void`:无类型变量,用于表示没有类型。

6. `struct`:结构体类型,用于组合多个不同类型的数据。

7. `union`:联合体类型,用于在同一块内存中存储不同的数据类型。

8. `enum`:枚举类型,用于定义一组命名的常量。

这些变量类型可以根据需要进行组合和嵌套,以满足具体的应用需求。

在C语言中的实型变量分为两种类型

在C语言中的实型变量分为两种类型

在C语言中的实型变量分为两种类型
1. float类型:float是单精度浮点数类型,它通常占用4个字节(32位)的内存空间。

它可以表示大约6-7位的有效数字,并具有约6
位的有效位数。

float类型的变量在赋值时需要加上后缀"f"或"F",比如:float num = 3.14f;。

2. double类型:double是双精度浮点数类型,它通常占用8个字节(64位)的内存空间。

它可以表示大约15位的有效数字,并具有约15
位的有效位数。

double类型的变量在赋值时不需要加上后缀,比如:double num = 3.14;。

两种实型变量类型的区别在于所占用的内存空间和有效位数的不同。

由于double类型具有更高的精度,可以表示更大范围的数值,所以在实
际开发中,较常用的是double类型,特别是需要较高精度计算的情况下。

而float类型则适用于对精度要求不那么高的场景。

10、变量的作用域和存储类型

10、变量的作用域和存储类型

10、变量的作⽤域和存储类型1、变量的定义 变量定义:在程序运⾏过程中其值可以更改的格式:<存储类型> <数据类型> <变量名> = <初始值>;2、变量的作⽤域 变量的作⽤域定义:程序中可以访问⼀个指⽰符的⼀个或多个区域,即变量出现的有效区域,决定了程序的那些部分通过变量名来访问变量。

⼀个变量根据其作⽤域的范围可以分为函数原型作⽤域、局部变量和全局变量。

2.1、函数原型参数作⽤域 函数原型中的参数的作⽤域始于‘(’,终于‘)’。

2.2、局部变量 (1)、在函数内部定义的变量称为局部变量。

(2)、局部变量仅能被定义该变量的函数使⽤,其他函数是⽤不了的。

局部变量仅存在于该变量的执⾏代码块中,即局部变量在进⼊模块时⽣成(压⼊栈堆),在退出模块时消亡(弹出堆栈),定义局部变量的最常见的代码块是函数。

(3)、当全局变量和局部变量同名时,在局部范围内全局变量被屏蔽,不再起作⽤,或者说变量的使⽤遵守就近原则,如果在当前作⽤域中存在同名变量,就不会向更⼤的作⽤域中去寻找变量。

(4)、可以在不同的函数中使⽤相同的变量名,他们表⽰不同的数据,分配不同的内存,互不⼲扰,也不会发⽣混淆。

(5)、局部变量的定义和声明可以不加区分。

(6)、在{}内定义的变量只在{}内起作⽤。

2.3、全局变量 (1)、全局变量贯穿整个程序,它的作⽤域为源⽂件,可被源⽂件中的任何⼀个函数使⽤。

(2)、全局变量的定义和全局变量的声明并不是⼀回事,全局变量定义必须在所有函数之外,且只能定义⼀次,⼀般定义形式如下: 全局变量的定义格式:<数据类型> <变量名,变量名…..> 全局变量的声明出现在要使⽤该变量的各个函数内。

全局变量的声明格式:<extern> <数据类型> <变量名,变量名…….> (3)、全局变量在定义时就已分配了内存单元,并且可做初始赋值。

动态储存方式和静态储存方式

动态储存方式和静态储存方式

动态储存⽅式和静态储存⽅式变量从存在的时间(⽣存期)⾓度来分,可以分为动态储存⽅式和静态储存⽅式。

所谓静态存储⽅式是指在程序运⾏开始时由系统分配固定的储存空间的⽅式。

动态储存⽅式则是在程序运⾏期间根据需要进⾏动态的分配储存空间的⽅式。

存储空间分为3部分:(1)程序区(2)静态存储区(3)动态存储区。

在C语⾔中,每⼀个变量和函数都有两个属性:数据类型和数据的存储类别。

对数据型(如整型,字符型等):储存类别指的是数据在内存中的储存⽅式。

具体包含四种:⾃动的(auto),静态的(static),寄存器的(register),外部的(extern)。

根据变量的储存类别,可以知道变量的作⽤域和⽣存期。

1、auto变量函数中的局部变量,如不专门声明为static储存类别,都是动态的分配存储空间(栈),数据存储在动态存储区中。

函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调⽤该函数时,系统会给它们分配存储空间,在函数调⽤结束时,⾃动释放这些存储空间。

例:int f(int a) /*定义为f函数,a为形参*/ { auto int b,c=3; /*定义b,c为⾃动变量*/ }关键字auto可以省略,auto不写则默认为“⾃动存储类别”。

2、⽤stastic声明局部变量有时希望函数中的局部变量的值在函数调⽤结束后不消失,即存储单元不释放。

这时就应指定局部变量为“静态局部变量”,⽤static进⾏声明。

例:#include <stdafx.h>#include<stdio.h>int f(int a){auto b=0;static int c=3;b=b+1;c=c+1;return(a+b+c);}void main(){int a=2,i;for(i=0;i<3;i++){printf("%d\n",f(a));}}说明:(1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。

auto在c语言中的用法

auto在c语言中的用法

auto在c语言中的用法
在C语言中,auto关键字主要用于声明变量的存储类别。

它告诉编译器在函数内部为变量分配存储空间,并在函数退出时自动释放这些空间。

这是C语言中的默认存储类别,因此在函数内部声明的变量,如果没有明确指定存储类别,通常会被视为具有auto存储类别。

auto关键字还可以用于声明自动变量,也就是程序在运行过程中动态创建的变量。

这些变量的生命周期和作用域都在函数内部,当函数执行完毕时,它们的内存空间也会被释放。

自动变量通常用于存储临时值或中间结果,可以帮助程序员优化程序代码,提高程序的效率。

此外,在C++中,auto关键字还可以作为类型说明符,通过变量的初始值或表达式中参与运算的数据类型来推断变量的类型。

需要注意的是,在使用auto关键字时,需要遵循一定的语法规则和命名规范,以确保程序的正确性和可读性。

同时,auto关键字的使用也需要根据具体的情况进行选择和判断,以达到最优的编程效果。

总之,auto关键字在C语言中具有重要的作用,它可以用于声明自动变量和指定变量的存储类别,是C语言编程中不可或缺的一部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言变量的存储类别
前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。

从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。

静态存储方式:是指在程序运行期间分配固定的存储空间的方式。

动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。

用户存储空间可以分为三个部分:
1.程序区;
2.静态存储区;
3.动态存储区;
全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。

在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;
动态存储区存放以下数据:
1.函数形式参数;
2.自动变量(未加static声明的局部变量);
3.函数调用实的现场保护和返回地址;
对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。

在c语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。

8.1.1auto变量
函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。

函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。

这类局部变量称为自动变量。

自动变量用关键字auto作存储类别的声明。

例如:
int f(int a) /*定义f函数,a为参数*/
{
auto int b,c=3; /*定义b,c自动变量*/
……
}
a是形参,b,c是自动变量,对c赋初值3。

执行完f函数后,自动释放a,b,c所占的存储单元。

关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

8.1.2用static声明局部变量
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

【例8.15】考察静态局部变量的值。

f(int a)
{auto b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
对静态局部变量的说明:
1.静态局部变量属于静态存储类别,在静态存储区内分配存储单元。

在程序
整个运行期间都不释放。

而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。

2.静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是
在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3.如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自
动赋初值0(对数值型变量)或空字符(对字符变量)。

而对自动变量来说,如果不赋初值则它的值是一个不确定的值。

【例8.16】打印1到5的阶乘值。

int fac(int n)
{static int f=1;
f=f*n;
return(f);
}
main()
{int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
8.1.3register变量
为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

【例8.17】使用寄存器变量。

int fac(int n)
{register int i,f=1;
for(i=1;i<=n;i++)
f=f*i
return(f);
}
main()
{int i;
for(i=0;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
说明:
1.只有局部自动变量和形式参数可以作为寄存器变量;
2.一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
3.局部静态变量不能定义为寄存器变量。

8.1.4用extern声明外部变量
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。

如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。

表示该变量是一个已经定义的外部变量。

有了此声明,就可以从“声明”处起,合法地使用该外部变量。

【例8.18】用extern声明外部变量,扩展程序文件中的作用域。

int max(int x,int y)
{int z;
z=x>y?x:y;
return(z);
}
main()
{extern A,B;
printf("%d\n",max(A,B));
}
int A=13,B=-8;
说明:在本程序文件的最后1行定义了外部变量A,B,但由于外部变量定义的位置在函数main之后,因此本来在main函数中不能引用外部变量A,B。

现在我们在main函数中用extern对A和B进行“外部变量声明”,就可以从“声明”处起,合法地使用该外部变量A和B。

相关文档
最新文档