c语言自动变量的潜在问题,c语言中的自动变量

本文目录一览:

关于c语言auto变量和static变量区别

auto是自动变量,在C语言中编译器已给不加关键字的定义默认为自动变最,即auto,因此在实际中没必要加。static是静态变量,即该变量不会改变,任何赋值都无效,有点类似预处理。

C语言中的自动变量和寄存器变量是什莫?

C语言学习之变量存储

C语言中对变量的说明包括两方面的内容:变量类型以及变量的存储类型。变量类型如:int(整形),char(字符型)是用来说明变量所占用的内存空间的大小。变量存储类型用来说明变量的作用范围。

C语言的变量存储类有:自动类、寄存器类、静态类和外部类。

关键字auto加在变量名及其类型前,用来说明它是自动变量。局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 从来不用。 局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自动消失。

static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。

1. 静态局部变量

它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它

函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。

2. 静态全程变量

静态 全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与

全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。

extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要 被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用 extern来说明。

寄存器变量to能够长在执行速度很重要的情况下使用。其思想是告诉编译程序把该变量放在一个CPU寄存器中。因为数据在寄存器中操作比在内存中快,这样就提高了程序代码的执行速度。寄存器变量的说明是在变量名及类型之前加上关键字register。值得注意的是取地址运算符不能作用于寄存器变量。

file1.c

#include stdlib.h

#include stdio.h

int reset();

int next();

int last();

int sum(int );

int i=1;

void main()

{

auto int i,j;

i=reset();

for(j=1;j=3;j++)

{

printf(“i=%d\tj=%d\n”,i,j);

printf(“next(i)=%d\n”,next());

printf(“last(i)=%d\n”,last());

printf(“sum(i+j)=%d\n”,sum(i+j));

}

}

file2.c文件

static int i=10;

int next()

{

return(i+=1);

}

int last()

{

return(i-=1);

}

int sum(int i)

{

static int j=5;

return(i=j+=i);

}

file3.c文件

extern int i;

reset()

{

return(i);

}

运行结果:

i=1 j=1

next(i)=11

last(i)=10

sum(i+j)=7

i=1 j=2

next(i)=11

last(i)=10

sum(i+j)=10

i=1 j=3

next(i)=11

last(i)=10

sum(i+j)=14

具体分析一下三个文件中的变量的种类。

在file1.c的开头声明i是外部变量,并出示化为1。而在main函数内部,说明了两个自动变量i和j,这样在main内部出现的i就是自动量。在file3.c的开头说明i是外部的,表明它与file1.c定义的i是同一个变量,所以reset的值返回的就是这个i的当前值1。file2.c文件已开始就定义了变量i,并声明为静态变量,因此它的使用范围只在当前文件中使用。然而从函数sum中定义来看,其内部用到的i是形式参数,j是内部静态变量,它们与以前的i,j都不同。

具体执行过程分析如下:

首先程序经过编译后声称可执行文件,运行可执行文件后,函数从Main函数体进入,在初始化的过程中得到i为全局变量,初值为1。进入main函数后首先调用函数reset(),进入文件file3.c,文件file3.c声明i为外部变量,所以此时i的值为1,则返回的值为1。函数reset()执行完后返回主函数,继续执行循环体中的程序。循环体首先调用函数next(),程序进入file2.c文件,判断i为静态变量,所以此时i的值为10,执行next()之后i的值为11,返回值为11,并将11作为i的值。当调用last()函数时,判断i的值为11,执行函数后,i的值变为10,并将10作为i的值。最后执行函数sum(i),此时值的注意的是执行程序时传递的是形参,即第一次调用时实际计算的值为sum(i+j=2),这样调用函数sum(i)后执行的结果为i=5+2=7,即为执行的结果。依次类推,分别为7,10,14。

通过以上的程序可以理解不同的存储类型的作用范围不同,在程序设计中如何灵活的使用各种不同的存储类型是能够使程序更灵活。

C语言的定义变量问题?

auto

(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。

(2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然在栈上,说明它如果不初始化那么值就是随机的······)

(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/182352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-24 06:20
下一篇 2024-11-24 06:20

相关推荐

  • Python官网中文版:解决你的编程问题

    Python是一种高级编程语言,它可以用于Web开发、科学计算、人工智能等领域。Python官网中文版提供了全面的资源和教程,可以帮助你入门学习和进一步提高编程技能。 一、Pyth…

    编程 2025-04-29
  • int类型变量的细节与注意事项

    本文将从 int 类型变量的定义、声明、初始化、范围、运算和类型转换等方面,对 int 类型变量进行详细阐述和讲解,帮助读者更好地掌握和应用 int 变量。 一、定义与声明 int…

    编程 2025-04-29
  • 如何解决WPS保存提示会导致宏不可用的问题

    如果您使用过WPS,可能会碰到在保存的时候提示“文件中含有宏,保存将导致宏不可用”的问题。这个问题是因为WPS在默认情况下不允许保存带有宏的文件,为了解决这个问题,本篇文章将从多个…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python input参数变量用法介绍

    本文将从多个方面对Python input括号里参数变量进行阐述与详解,并提供相应的代码示例。 一、基本介绍 Python input()函数用于获取用户输入。当程序运行到inpu…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • Java Thread.start() 执行几次的相关问题

    Java多线程编程作为Java开发中的重要内容,自然会有很多相关问题。在本篇文章中,我们将以Java Thread.start() 执行几次为中心,为您介绍这方面的问题及其解决方案…

    编程 2025-04-29
  • Python匿名变量的使用方法

    Python中的匿名变量是指使用“_”来代替变量名的特殊变量。这篇文章将从多个方面介绍匿名变量的使用方法。 一、作为占位符 匿名变量通常用作占位符,用于代替一个不需要使用的变量。例…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29

发表回复

登录后才能评论