首页 > 其他分享 >函数(4)本地变量(局部变量)及函数细节补充

函数(4)本地变量(局部变量)及函数细节补充

时间:2023-11-19 14:44:50浏览次数:32  
标签:定义 int void 局部变量 本地 main 变量 函数

<1>本地变量

(1)本地变量的定义

  • 函数每一次运行都会产生一个独立的变量空间,在这个变量空间中的变量是函数此次运行中独有的变量,称为本地变量;
  • 定义在函数内部的变量就是本地变量;
  • 参数也是本地变量;

(2)变量的生存期和作用域

  • 生存期:从变量开始出现到变量消亡的时间;

  • 作用域:在代码的什么范围内可以访问这个变量(变量有作用);

——————对于本地变量,二者的答案统一:大括号内

1):我们在此处以一段代码为例对生存期和作用域的概念进行理解:

#include<stdio.h>

void swap(int a,int b);
int main(){
int a=5;
int b = 6;
swap(a,b);
printf("a=%d b=%d\n",a,b);
return 0;
}
void swap(int x,int y){
int t=x;
x=y;
y=t;
}

  1. 操作方法我们利用devc++进行调试,判断标准为编译器是否给出Not found in current context的指令,若给出这条指令,则证明这个变量不存在。

  2. 结果:我们可以观察到:当停留在main函数中,a,b的值存在,x,y,t的值不存在;而停留在swap函数中时,我们发现x,y,t的值存在,而a,b的值不存在

  3. 注意:我们处在某一函数块中时,只有此函数块中的值能显示,非此函数的值不显示,但不代表不存在,只是不能在当前的上下文访问它们——————生存期仍然存在,作用域不存在。这个概念就与本地变量的定义相互呼应。
  4. 重点:在我们进行函数调用时,进行的操作是从一个变量空间进入另一个变量空间,每个变量空间中进行的操作互不影响

(3)本地变量的规则

  • 本地变量是定义在块内的(即{}中),它可以定义在函数块中,也可以定义在语句块中

1)我们以一段代码为例

if(a<b){
int i=10;
}

——————在这段代码中,我们在if语句块中定义了一个整型变量i,整型int的生存期和作用域仅在if这个块中存在

2)同时我们甚至能随意使用大括号来定义变量

我们的大括号可以不依附任何语句,在这个大括号中定义的变量可以进行参与运算,输出等操作;

3)程序进入对应块之前,其中的变量不存在,离开这个块,其中的变量消失

4)在函数块外定义的变量在里面仍然存在,但是在里面定义的变量出函数之后会消失

————我们以一段代码为例
int main(){
int a = 5;
int b= 6;
swap(a,b);{
int i=0;
printf("%d\n",a);
}
printf("a=%d,b=%d\n",a,b);
return 0;
}

  • 我们可以看出定义的a,b变量是在swap函数块外的,但是运行结果输出了a,b的值,这就证明了————在函数块外定义的变量在函数中仍然存在

5)块里面定义了和外面同名的变量就掩盖了外面的

我们以一段代码为例:
nt main(){
int a = 5;
int b= 6;
swap(a,b);{
int a=0;
printf("%d\n",a);
}
printf("a=%d,b=%d\n",a,b);
return 0;
}

—————这段代码的运行结果是a=0,而不是外面同名变量a的值5,所以当内外变量名重合时,我们以块内变量为重

6)注意:我们能在块内外使变量同名,但是不能在同一语句块中定义两个同名变量

7)本地变量不会被默认初始化,会给出任意值

<2>函数细节补充

(1)函数无参数时的表现形式

进行判断:当函数无参数时,应该表达为
void f(void)
还是void f()
————二者的区别是参数表中是否有void

    1. 当我们在参数表中放入void,就是明确告诉编译器我们函数不接收任何参数;
    1. 参数表中不放入任何东西,在传统C中,它表示f函数的参数未知而不是没有参数
注意:在第二种情况中,我们的编译器会对f函数的类型进行猜测,这就意味着我们编译器猜测的变量类型可能与我们在函数中实际定义的类型不相符,编译就会出现问题,因此我们并不推荐第二种表达形式,而应该将参数表达清楚

(2)逗号和逗号运算符的区分

举例说明:
  • f(a,b)————调用函数时的圆括号中的逗号是标点符号(传两个参数)
  • f((a,b))—————而这里则是先进行内括号中的运算,再进行调用,内括号中的逗号就是运算符(传一个参数)

(3)函数中不允许嵌套函数

  • C语言不允许函数嵌套定义(允许函数嵌套声明)

(4)关于main

  1. int main()也是一个函数;
  2. 判断是否需要写成int main(void)————不影响;
  3. return 0有意义————因为main是一个函数,return 0起到的作用是检查main函数返回的数据类型是否正确

标签:定义,int,void,局部变量,本地,main,变量,函数
From: https://www.cnblogs.com/QingYuY/p/17842025.html

相关文章

  • 2023-11-19 无法将“gradle”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。(wi
    系统环境:windows出现该提示,一般情况下都是因为你没有把你安装的gradle包路径放到系统变量如果你没有安装gradle,可以前往gradle官网下载:https://gradle.org/install如果你已经安装了gradle,那下面就是把gradle包路径放到系统变量的教程: 系统变量==》Path==》新建 输入gradl......
  • 如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?
    (如何使用Matplotlib模块的text函数给柱形图添加美丽的标签数据?)1简单引入在进行数据分析时,当一些图表数据,比如柱形图我们想让它更直观的显示一些内容,有时候会给柱形图添加标签,那如何实现这样的效果呢?还有比如我们把某手机品牌1-12月每月的销量制作成柱形图,那如何在柱形图上......
  • JAVA中的函数接口,你都用过吗
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。在这篇文章中,我们将通过示例来学习Java函数式接口。函数式接口的特点只包含一个抽象方法的接口称为函数式接口。它可以有任意数量的默认静态方法,但只能包含一个抽象方法。它还可以声明对象类......
  • 函数式+泛型编程:编写简洁可复用的代码
    WriteLessDoMore.引子我个人比较信奉的一句编程箴言:WriteLessandDoMore。无论是出于懒,还是出于酷炫的编程技艺,或者是一种编程乐趣。函数式和泛型编程是编写简洁可复用代码的两大编程技艺,组合起来威力更加强大。另一项技艺是元编程。本文主要来讲讲函数式和泛型编程。......
  • 【教3妹学编程-java基础6】详解父子类变量、代码块、构造函数执行顺序
    -----------------第二天------------------------本文先论述父子类变量、代码块、构造函数执行顺序的结论,然后通过举例论证,接着再扩展,彻底搞懂静态代码块、动态代码块、构造函数、父子类、类加载机制等知识体系。温故而知新,建议点赞收藏~ 1先说结论 面试官:好的,你说一下java中父......
  • python:第二十五章:range函数
    一,range函数的功能1,语法range(start,stop,step)参数 start:序列的起始值,如果不指定,默认为0。stop:序列的结束值(不包含),必须指定。step:序列的步长,如果不指定,默认为1。返回:一个整数序列,数据类型是:range应用场景:用于循环2,整数序列是从起始值到结束值(不包含结束值本身)的......
  • 欧拉函数
    欧拉函数定义法定义法求欧拉函数是O(sqrt(n))的时间复杂度只可以求单个数的欧拉函数,/*欧拉函数φ的定义,φ(i)表示从[1,i]之间和i互质的数量(a和b互质即gcd(a,b)==1)欧拉函数是积性函数,例如a,b都为质数,那么φ(a*b)=φ(a)*φ(b),递推式为φ(a*b)=......
  • 函数(3)函数原型和参数传递
    <1>函数原型(1)函数先后关系我们将自己定义的函数放在主函数main之前—————是因为:C的编译器自上而下顺序分析代码,这样在主函数中调用自定义函数才合理1.我们以一段代码为例#include<stdio.h>voidsum(intbegin,intend){inti;intsum=0;for(i=begin;i<=end;i++......
  • vue中遇到的函数执行顺序问题
    vue中遇到的函数执行顺序问题总结:vue中方法和方法间并未严格按照执行顺序执行的,可以使用async和await修饰符,使方法调用和执行是异步的。在vue中的方法调用顺序是依次进行的,方法体内部也是依次执行的,但是,两个方法体的执行顺序并不能严格控制,也就是说,并不一定是先执行完第一个方......
  • python 数据可视化:直方图、核密度估计图、箱线图、累积分布函数图
    本文使用数据来源自2023年数学建模国赛C题,以附件1、附件2数据为基础,通过excel的数据透视表等功能重新汇总了一份新的数据表,从中截取了一部分数据为例用于绘制图表。绘制的图表包括一维直方图、一维核密度估计图、二维直方图、二维核密度估计图、箱线图、累计分布函数图。 目录......