C语言中的“局部变量”是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的“局部变量”是啥意思?相关的知识,希望对你有一定的参考价值。

局部变量是指在程序中,只在特定过程或函数中可以访问的变量,是相对于全局变量而言的。
在C语言中,局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。
#include

int fun(int a)

int temp; // 变量temp就是定义的一个局部变量,在fun函数执行完后,其在内存中占用的内存区就会释放回收
temp = 2*a;
return temp;

int b; // 变量b就是一个全局变量,当程序执行完后,才释放其占用的内存
void main()

int a=2; // 变量a也是局部变量
b = fun();
参考技术A C语言中全局变量有两种情况:
1.
定义在所有函数之外的变量;
2.
用static修饰的变量;
其余的变量都是局部变量,即定义在某个函数或者代码段内部,其作用域局限于这个函数或者代码段。
参考技术B 静态局部变量是为了再下一次进入其所属函数时,变量的值仍保持上一次的值.而main函数在程序的一次运行中只会运行一次,所以设置静态局部变量就没有意义了. 参考技术C 就是在某个函数内的变量,不会影响到其他的变量的!
而全局变量的话,很有可能就会影响到其值的变化.
参考技术D C语言全局变量和局部变量
引子---
?
??
???变量可以在程序中三个地方说明:
函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同,
变量可分为局部变量、形式参数和全程变量。从空间角度来看,变量可以分为全局变量和局部变量,而从时间角度来分的
可以有静态存储变量和动态存储变量之分。
一。全局变量和局部变量
1。局部变量
他是
指在函数内部定义的变量
作用域为定义局部变量的函数
也就是说他只能在定义他的函数中使用
最值得注意的是
只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失
eg.
func
()

?
?int
x;?
?局部变量x的作用域
很明确
?
?......

2。全局变量
在程序执行的过程中一直有效
eg.
int
x=1;
func
()

?
?x=x+1;

func1
()

??x=x-1;

main
()


由此不难看出整型x的作用范围
对于全局变量
如果在定义的时候不做初始化
则系统将自动为起赋值
数值型为0
字符型为空'\0'
全局变量的弊端
增加内存开销
降低函数的通用性
定义全局变量时
理想的位置是在文件的开头
当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时
在函数内部对该变量使用extern
加以说明
说明他是外部的
(这里还要做详细的讲解)
eg.
main
()

extern
int
a,b;
printf
("mIn
is
%d\n",min(a,b));

int
a=1,b=2;
int
min
(x,y)
int
x,y;

int
z;
z=x

评论
0

0

加载更多

C语言中的“流”是啥意思?

【中文标题】C语言中的“流”是啥意思?【英文标题】:What does 'stream' mean in C?C语言中的“流”是什么意思? 【发布时间】:2016-12-03 19:47:48 【问题描述】:

我正在阅读“C Primer Plus”中处理文件、流和键盘输入的部分。作者将流的概念与文件联系起来,定义流如下:

从概念上讲,C 程序处理流而不是直接处理文件。 流是实际输入或输出映射到的理想化数据流。这意味着具有不同属性的各种输入由具有更统一属性的流表示。打开文件的过程就变成了将流与文件关联起来,通过流进行读写

作者所说的粗体字是什么意思?文件和流之间的联系是什么?

【问题讨论】:

从 Internet 上的各种其他来源搜索并阅读 C 中的文件流,即。 tutorialspoint.com等你会明白的。 您已经用粗体字标记了答案。这正是它的本质。毕竟不是一个坏问题,但我怀疑它是否属于这里 也许你可以想象它就像一个管道(输送水的管子)——一个数据可以通过它流入和流出的连接。 @BatCoder 你说的管道是什么意思? 【参考方案1】:

设计 C 的人想要一种统一的方式来连接不同的顺序数据源,例如文件、套接字、键盘、USB 端口、打印机等等。

因此,他们设计了一个可以应用于所有人的界面。此接口使用所有这些接口共有的属性。

为了更容易谈论可以通过界面使用的东西,他们给了这些东西一个通用名称,streams

使用相同接口的好处在于,可以使用相同的代码从键盘或套接字读取文件。

【讨论】:

流本质上是文件本身吗? (只是出于好奇) 什么是文件?文件是一种抽象。它是内存中某处的地址,指示一系列字节中的第一个字节(如果它是一个大文件,它也可以被分段)。流也是写入字节和读取字节的内存位置。从这个意义上说,它就像一个文件,您可以从中写入和读取。但它们都是抽象的。它们只是内存偏移量,人们可以在其中读取和写入数据【参考方案2】:

流是处理不同数据介质/源的C way。这些 可以包括说

    一个文件 一个插座

等等。 stream 作为一个接口,可以帮助您忘记如何在后台管理数据并专注于期望的目标。

【讨论】:

【参考方案3】:

是代表文件设备的逻辑实体,可以接受输入或输出。标准 C 中的所有输入和输出函数都对数据流进行操作。流可以分为文本、流和二进制流。

【讨论】:

【参考方案4】:

请注意,文件和流是完全不同的东西。文件只是字节序列,而流只是促进者(帮助者)。

之所以出现流,是因为所有程序都需要以多种不同的形式与其周围环境进行交互(可以是文件,可以是 I/O 设备,例如显示器和键盘,也可以是网络套接字等)。

所以流是一个界面(一个简单的“面孔”,可以处理与我们无关的许多微妙之处,就像我们不需要知道电视遥控器是如何工作的一样!) 用于触发数据的输入/输出流,从/到任何可能是该输入/输出数据的源/目标的东西,隐藏操作系统按顺序设计的众多方法的低级实现细节代表程序员与各种设计的硬件进行交互(即,我们——作为程序员——对每次创建新软件时重新编程操作系统与各种硬件交互的方式并不真正感兴趣)。

例如,考虑我们的程序从键盘获取输入的方式......,这是怎么发生的?这是通过操作系统provides for every "process"的隐藏(对程序员隐藏)流发生的(一旦程序运行,它将是所谓的process),并且操作系统将地址提供给标准流自动处理它(即,我们不需要编写代码来定位它的地址)。此流通常称为“stdin”(源于 C 和 Unix 术语),或更正式地称为“标准输入流”。我们的程序,无论用什么语言编写,都必须能够使用操作系统通过该语言的标准 I/O 库生成的此类标准流。作为一个例子,在 C 编程语言中,我们可以通过调用函数“scanf”来扫描标准输入流(scanf 会自动知道我们程序的标准输入在哪里)。

但是作为另一个重要的例子,还是在 C 中,假设这次我们的程序想要将用户的输入写入“文件”... 是否只有标准输入流的存在在这种情况下就够了吗?当然不是!这一次,我们需要使用一对流,一个已经由操作系统提供的stdin,来获取用户的输入,另一个,让我们的程序和文件进行通信!所以我们必须创建第二个流!可以通过调用the fopen() function 来完成。 (有趣的事实:在手册中,如果你注意到,你会看到这个函数的返回类型是一个指向名为 FILE 的结构的指针,但这只是一个传统的“bad choice of word”,实际上是一个指向“流”的指针"!是的,C 中的 FILE 类型确实是流,而不是文件!(我明白了,疯了!)所以请记住,指针 FILE* 不指向实际文件,它指向包含有关信息的流该文件,包括有关用于文件 I/O 的缓冲区的信息等)

注意:我们自己创建的流(例如文件流)可以是双向,而标准流是单向。下图中的箭头也很好地说明了这一点:

也作为C++世界中的一个例子给你比较,你知道在那里,东西在类而不是结构中,所以你会遇到一个对象 如果您正在输出,则称为“cout”(输出流对象),它是连接到输出流(C 中的标准输出)的对象,并且是类 ostream 的实例(来自类层次结构 ios_base printf())。这一次,cout 不足以与其他事物(例如文件)交互,我们需要创建自己的流。在 C++ 中,可以通过实例化 ifstream 和 ofstream 类(对应于 C 中的 FILE 结构)来实现,这将产生与 C 中的指针“FILE*”基本相同作用的对象。

希望有帮助。


插图归功于 linuxhint.com

【讨论】:

@M-S 你明确提到了input from keyboard, how does that happen?stdout。为什么出来了?你接受输入。不应该是stdin 吗? @JinLim 确定这是一个错误,感谢您提及,我现在已在编辑中修复它。【参考方案5】:

如果有帮助,我的 C 编程学位使用了以下说明: “流是文件的抽象,它为程序员提供一致的接口,而不管实际设备如何。”

【讨论】:

【参考方案6】:

一个流就是一个文件 * 像函数 C FILE * fopen ( const char * filename, const char * mode ) 这个函数返回一个文件 *

文件:

包含控制流的信息的对象 标识流并包含控制流所需信息的对象类型,包括指向其缓冲区的指针、位置指示器和所有状态指示器。

【讨论】:

以上是关于C语言中的“局部变量”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中static说明是啥意思?

static在c语言中是啥意思

C语言中的 局部变量,存储在啥地方?

C语言中变量加冒号是啥意思

C#中的“定义字符串变量”是啥意思。

计算机c语言中auto是啥意思,有啥功能