精华内容
下载资源
问答
  • C语言中的常量与变量(详细讲解附代码)
    千次阅读
    2020-09-23 22:10:26

    C语言中的常量与变量

    一、常量:不会变化的数据,不能被修改

    1.举例
    比如 “hello” 为字符串常量、‘A’ 为字符常量 、-10 为整型常量、3.1415926 为浮点常量;
    2. 宏定义

    #define PI 3.1415
    

    这样定义出来的 PI 也是常量,数值为3.1415;
    **【强调】**在进行宏定义时,没有分号结束标记。
    【推荐】 定义宏: 语法: #define 宏名 宏值
    3. const int a = 10;
    定义语法:const 类型名 变量名 = 变量值。

    const关键字: 被该关键字修饰的变量,表示为只读变量。

    宏定义常量代码举例:定义出Π,然后计算圆的周长与面积。

    #include <stdio.h>
    
    #define PI 3.1415			// 常量
    
    int main(void)
    {
    	// 圆的面积  s = PI x 半径的平方
    	// 圆的周长  l = 2 * PI * r	
    	//int r = 3;				// 变量
    	const int r = 3;		// 只读变量
    
    	float s = PI * r * r;
    	float l = 2 * PI * r;
    
    	//printf("圆的周长为:%f\n", l);  //18.849001
    	//printf("圆的面积为:%f\n", s);  //28.273500
    
    	printf("圆的周长为:%.2f\n", l);	// 指定小数点后保留2位, 对第3位做,4舍五入
    	printf("圆的面积为:%.2f\n", s);	// 指定小数点后保留2位
    
    	return 0;
    }
    

    二、变量:会变化的数据,能被修改。

    1、常用的定义变量的语法为

    类型名 变量名 = 变量值

    变量三要素:类型名、变量名、变量值。

    举例:int r = 3; float s = PIrr;(变量值是一个表达式)

    2、变量的定义与声明:

    变量的定义:
    int a = 40;

    变量的声明:
    1)int a; 没有变量值的变量定义 叫做声明。

    2)extern int a; 添加了关键字 extern。

    注:变量定义会开辟内存空间,但是变量声明不会开辟内存空间。变量要想使用必须有定义。当编译器编译程序时,在变量使用之前,必须要看到变量定义。如果没有看到变量定义,编译器会自动找寻一个变量声明提升成为定义。但是如果该变量的声明前有 extern 关键字,无法提升。
    还有,在定义变量时,尽量不要重名。

    3、标识符:常量和变量的总称

    命名规则:

    1. 通常常量使用大写、变量使用小写。大小写严格区分。

    2. 只能使用字母、数组、下划线 命名标识符。且,数字不能开头。
      举几个例子:
      int a5ir = 10; ok

      int _34F = 6; ok

      float s2_i85c = 5.4; ok

      int 98ti_54 = 4; error.

    3. 禁止使用关键字和系统函数作为标识符名称。 main/system/printf/sleep…

    更多相关内容
  • Arduino Uno 学习第三课,常量与变量

    千次阅读 2020-12-19 17:06:01
    实际上,我们在编写程序的时候,对引脚的使用,一般不会直接使用常量,更喜欢先定义一个变量(或者常变量)来表示对应的引脚号。为什么呢? 理由:   ①变量需要定义变量名,有变量名(见名知义)就能直观的看出...

    本节目标:

    1.常量的定义和种类。
    2.变量与常变量。
      ①区别与差别
      ②格式
      ③需定义后才可使用
      ④数据类型
      ⑤变量名命名规则
      ⑥变量初始化
      ⑦作用域
      ⑧类型转换

    常量

    在这里插入图片描述
    由上节课我们知道LED_BUILTIN等同于13,所以上面的程序是等价的。
    而这边的数字13被我们成为常量。

    常量是固定值(又叫字面量),在程序执行期间不会改变的量,是固定的值。
    常量可以是任何的基本数据类型,如:整数常量、实型常量、字符常量和字符串常量。
    在这里插入图片描述
    在这里插入图片描述

    变量与常变量的区别

    实际上,我们在编写程序的时候,对引脚的使用,一般不会直接使用常量,更喜欢先定义一个变量(或者常变量)来表示对应的引脚号。为什么呢?
    理由
      ①变量需要定义变量名,有变量名(见名知意)就能直观的看出对应引脚连接的是哪个元器件。
      ②当需要更改元器件引脚号时,可以实现一改多改,减少漏改、少改的情况,修改也更加方便。

    故示例程序可以修改为如下图所示:
    在这里插入图片描述

    问题一:变量与常变量定义的区别?

    变量: volatile int redLedPin = 13; volatile可以省略
    常变量:const int redLedPin = 13; const 不可省略,省略就分不清与变量的区别。
    在这里插入图片描述

    问题二:变量与常变量真正的差别?

    变量:在程序的过程中有可能会发生变化。
    常变量:在程序的过程中绝对不会发生变化,一直保持初始化的值。

    变量的知识点:

    变量:一个有名字的,具有具体属性的一个存储单元
      在这里我们将计算机的存储空间比喻为一栋的存储仓房。不同的变量就是在这栋大仓房划分不同的房间
      根据不同的物品的类别(变量的数据类型),分配不同空间大小的房间(且该房间只能存储对应的物品,不能存储其他类别的物品)。

    知识点一:变量的定义格式

    在这里插入图片描述

    知识点二:变量必须先定义才能使用

    理由:因为变量就像是一个房间,如果不先设置房间号的话,你能直接进入正确房间么?很明显不行,所以我们必须要先把变量定义好,才可以在使用对应的变量。

    知识点三:变量的数据类型

    数据类型是对变量的修饰,前面我们举了个例子,变量就是大仓房中房间,而每个房间能存储的物品类型和房间大小是不相同的,而数据类型就是用来固定大小和存储的类别。
    在这里插入图片描述
    C语言中有哪些数据类型呢?
    在这里插入图片描述
    在这里插入图片描述
    在这里我们看到了一个从没有见过的名称:字节数。
    为此,我们还需要了解一下计算机的存储容量的计量单位。
    最小的计量单位bit(又名“比特”,“位”,b),一个比特就代表一个0或1(即二进制),通常数据传输都是以bit为传输单位的。
    最常用的计量单位Byte(又名“字节”,B),是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位比特,即它包含八位的二进制数,通常数据存储是以“字节”(Byte)为单位。
    在这里插入图片描述

    知识点四:变量名的命名规则

    ①只包含英文字母,数字,下划线“_”。
    ②其中数字不能作为开头。
    ③不能与系统关键字重名。
    ④变量名区分大小写。
    ⑤不同变量不能使用同一个名字。
    ⑥采用驼峰式(首个单词字母小写,之后单词首个字母大写)
    ⑦有含义的名字,见名知意。
    注意:
      ⑥、⑦非定性要求

    知识点五:变量的初始值可不赋值。

    在这里插入图片描述

    知识点六:变量的作用域

      我们知道变量声明就类似这样的一个大仓房给物品分类存储,但是我们知道,物品不单单要储存,还要拿出去卖,而这样的卖家呢?
      我们根据他们经商的范围分成两类:一类是大的经销商(可以在世界各地进行买卖),一类是小商店(只能在一些固定的地方进行买卖)。
      变量也是这样,我们根据他们作用域(作用的范围)分成两类:全局变量局部变量。即:变量的作用域(变量有效性的范围,与变量定义的位置密切相关,作用域是从空间这个角度来描述变量的)。
      1.局部变量:在函数内部定义的变量,只能在定义它的函数内使用,其他函数不能使用。
      2.全局变量:从定义点开始直到程序文件结束的变量,在程序的整个运行过程中,都占用存储单元。在一个函数中改变全局变量的值,其他函数可以共享,全局变量相应于起到函数间传递数据的作用。

    知识点七:算数转换与强制类型转换。

      常用的算术转换隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型。
    在这里插入图片描述
      强制类型转换把变量从一种类型转换为另一种数据类型
    例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:
    在这里插入图片描述

    展开全文
  • C语言常量 变量与作用域

    千次阅读 2022-03-22 20:17:52
    变量与常量一、常量与符号常量constdefine二.变量与变量定义命名规则1.变量定义语句2.变量赋初值typedef 一、常量与符号常量 整型常量 以下是合法的整型常量表示形式: 256,-75,0(十进制整型常量) 0237,045,...

    一、常量与符号常量

    在这里插入图片描述

    1.整型常量

    以下是合法的整型常量表示形式:
    256,-75,0(十进制整型常量)
    0237,045,0621(八进制整型常量,用数字0作前导)
    0x28AF,0xED4(十六进制整型常量,用数字0与x作前导)435L,350L(长整型常量)
    不合法的整型常量举例如下:
    096(9非八进制数码)
    48EA(十六进制数缺前导字符0x)
    0xK(K非十六进制计数字符)

    2.实型常量

    实型常量只能用十进制形式表示,不能用八进制和十六进制形式表示。如:28.76,564.03,2.34E+8,15.78E-2都是合法的实型常量,而6.4E+4.8,E9,E-7都是不合法的实型常量。

    3.字符常量

    ‘x’,‘+’,‘\n’,'\101’都是合法的字符常量。

    4.字符串常量

    " changsha","central south university " 和 "+++? ab"都是合法的字符串常量。

    const

    const定义常量在C语言中,可以使用const来定义一个常量。常量的定义与变量的定义很相似,只需在变量名前加上const即可,如下所示。

    int const a;
    

    以上语句定义了a为一个整数常量。既然a的值不能被修改,如何让a拥有一个值呢?这里一般有两种方法,
    其一,是在定义时对它进行初始化,如下所示。

    const int a=10;
    

    其二,在函数中声明为const的形参在函数被调用时会得到实参的值。

    int fun(const int a)
    

    在这里需要着重讲解的是const涉及指针变量的情况,先看两个const定义。

    const int*a;
    int*const a;
    

    在第一条语句中,const用来修饰指针a所指向的对象,也就是说我们无法通过指针a来修改其指向的对象的值。但是a这个指针本身的值(地址)是可以改变的,即可以指向其他对象。
    与此相反,在第二条语句中,const修饰的是指针a。因此,该指针本身(地址)的值是不可改变的,而该指针所指向的对象的值是可以改变的。

    define

    define实际是一个预处理指令,其实际的用途远大于定义常量这一功能。在这里,首先讲解define定义常量的基本用法
    使用define定义常量实际是进行符号替换,其定义方法为
    #define符号名替换列表符号名必须符合标识符命名规则。替换列表可以是任意字符序列,如数字、字符、字符串、表达式等,例如:

    #define MSG"I'm Antigloss!"/*后面的所有MSG都会被替换为“I'm Antigloss!”*/
    #define SUM 99/*后面的所有SUM都会被替换为99*/
    #define BEEP"\a"/*后面的所有BEEP都会被替换为“\a”*/
    

    习惯上,人们用大写字母来命名符号名,而用小写字母来命名变量。

    处理指令#define的最后面没有分号“;”,千万不要画蛇添足!

    一旦标识符定义成一个常量后,以后在程序处理时,凡是碰到了某个标识符,都将替换成对应的常量。

    二.变量与变量定义

    变量是以某标识符为名字,其值是可以改变的量。它是以下母或下划线开头的一串字母。数字或下划线构成的序列,最长为1~32个字符。

    命名规则

    1. 变量名以英文字母开头。
    2. 变量名中的字母是区分大小写的。
    3. 变量名不能是关键字。
    4. 变量名中不能包含空格、标点符号和类型说明符。

    注意:变量名6ab、4x-y、xy·2a、A7+B2都是不合法的,因为它们不符合标识符的组成原则。

    实际开发中变量的命名最好见名知意

    在C语言程序中,所有的变量必须加以说明,没有任何隐含的变量。变量说明主要是指变量代表计算机内存中的某一存储空间,这个存储空间可以存放不同的数据。出变量的名称,确定变量的数据类型。

    在C语言程序中,变量必须“先定义、后使用”。

    1.变量定义语句

    变量可以在程序的三种地方定义:函数内部、所有函数的外部和函数的参数定义中。由此定义的变量对应地称为局部变量、全程变量和形式参数。例如:

    int i,j,k;/*定义三个整型变量i,j,k*/
    float x1,y1;/*定义两个单精度型变量x1,y1*/
    char profit, loss;/*定义了两个字符型变量profit,loss*/
    

    变量名在定义时可以赋初值。例如:

    int a=5,b=8,c;
    floatex1=6.27,x2,x3=5.94;
    char ch='a', kk='A';
    

    在同一程序中变量名不允许被重复定义,如:

    int x,y,z;
    float a,b,x;/*变量名x被重复定义,不允许*/
    

    凡未被定义的标识符,不得作为变量名使用。如:

    int teacher;
    

    若程序中错将teacher打成teacher,出现:

    tcacher=80;
    

    编译将查出teacher未定义。
    每一变量被定义成某一类型,编译时将据此为其分配相应长度的存储单元。

    2.变量赋初值

    变量使用“=”赋初值,必须保证“="右边的常量(或表达式的值)与“=”左边的变量类型一致。例如:

    intx=3.2E5,a=15.6;
    

    变量赋值类型不一致将引起错误。
    另外,定义变量时,变量不能连续赋初值。

    int a=b=c=24.5;/*非法赋值*/
    

    typedef

    typedef是C语言的关键字,其作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(如int、char等)和自定义的数据类型(如struct等)。
    其基本用法如下所示。

    typedef 数据类型 自定义数据类型
    

    例如,用户可以使用以下语句。

    typedef unsigned long unit32 ;
    

    这样,就把标识符unit32声明为无符号长整型的类型了。之后,用户就可以用它来定义变量。

    uint32 a;
    

    此句等价于:

    unsigned long a;
    

    在大型程序开发中,typedef的应用非常广泛。目的有两点,一是给变量一个易记且意义明确的新名样字,二是简化一些比较复杂的类型声明。

    三.作用域

    变量的作用域定义:程序中可以访问一个指示符的一个或多个区域,即变量出现的有效区域,决定了程序的哪些部分通过变量名来访问变量。一个变量根据其作用域的范围可以分为函数原型作用域、局部变量和全局变量。

    1.函数原型作用域

    函数原型中的参数,其作用域始于“(”,结束于“)"。
    设有下列原型声明:

    double Area(double radius);
    

    radius的作用域仅在于此,不能用于程序正文其他地方。

    for (int i=0; i<10; i++)
    

    i 的作用域仅在于此,不能用于程序正文其他地方。

    2.局部变量

    在函数内部定义的变量称为局部变量。局部变量仅能被定义该变量的模块内部的语句所访问。换言之,局部变量在自己的代码模块之外是不可见的。

    模块以左花括号"{“开始,以右花括号”}"结束。

    对于局部变量,要了解的重要规则是,它们仅存在于定义该变量的执行代码块中,即局部变量在进入模块时生成(压入堆栈),在退出模块时消亡(弹出堆栈)。定义局部变量的最常见的代码块是函数,例如:

    void func1()
    {
    /*在funci中定义的局部变量x*/
    	int x;
    	x=10;
    	printf("%d",x);
    }
    void func2()
    {
    /*在func2中定义的局部变量x*/
    	int x;
    	x=2007;
    	printf("%d",x);
    }
    

    输出结果:

    x=10;
    x=2007;
    

    整数变量x被定义了两次,一次在funel中,另一次在func2中。funel和func2中的x互不相关,原因是每个x作为局部变量仅在被定义的模块内可见。
    局部变量是在函数内定义的变量。其作用域仅限于函数内,在函数内才能引用,即可以对它赋值或取值。在作用域以外,使用它们是非法的。例如:

    #include<studio.h
    void f1()
    {
    	int t=2;
    	a*=t:
    	b/=t;/*f1中引用main()中的变量a和b是非法的*/
    }
    
    void main()
    {
    	int a,b;
    	 /*输入两个数,分别存入变量a和b中*/
    	printf("Enter a,b:");
    	scant("%d,%d",&a,&b);
    	/*调用函数f1()*/
    	f1(); 
    	printf("a=%d,b=%d",a,b);
    }
    

    编译提示以下错误:

    errorC2065 :"a":未声明的标识符
    errorC2065 :"b":未声明的标识符
    

    要注意的是,在一个函数内部可以在复合语句中定义变量,这些复合语句成为“分程序”或“程序块”,如下所示。

    void funclo
    {
    /*在funci中定义的局部变量x*/
    	int x;
    	x=10;
    	{
    	/*定义程序块内部的变量*/
    		int c;
    	/*变量c只在这两个括号内有效*/
    		c=a+b;
    	}
    }
    

    在上述的例子中,变量c只在最近的程序块中有效,离开该程序块就无效,并释放内存单元。

    3.全局变量

    全局变量与局部变量不同,全局变量贯穿整个程序,它的作用域为源文件,可被源文件中的任何一个函数使用。它们在整个程序执行期间保持有效。

    #include <stdio.h>
    /*定义全局变量*/
    int a,b;
    void f1()
    {
    	int t1,t2;
    	/*使用全局变量在main()中的赋值*/
    	t1=a*2;
    	t2=b*3;
    	/*改变b的值*/
    	b=100;
    	printf("t1=%d,t2=%d\n",t1,t2);
    }
    void main()
    {
    /*全局变量赋值*/
    	a=2; b=4;
    	/*调用 f1()*/
    	f1();
    	printf("a=%d,b=%d",a,b);
    	system("pause");
    }
    

    输出结果

    t1=4,t2=12;
    a=2,b=100;
    

    在f1()中对全局变量b的赋值保留下来,在main()中输出。

    在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。因此,若在该函数中想要使用全局变量,则不能再定义一个同名的局部变量。
    如有以下代码:

    #include<stdio.h>
    /*定义全局变量i并赋初值为5*/
    inti=5;
    int main()
    {
    /*定义局部变量i,并未赋初值,i的值不确定,由编译器自行给出*/
    	int i;
    /*打印出i的值,查看在此处的i是全局变量还是局部变量*/
    	if(i!=5)
    	{
    		printf("it is localn");
    		printf("iis%d\n",i);
    	}
    	return O;
    }
    

    程序执行结果如下:

    it is local
    iis 134518324
    

    可以看到,i的值并不是全局变量所赋的初值,而是局部变量的值。

    由于全局变量从定义之处起,所有的函数都可以引用它。所以,全局变量的命名最好取有特殊含义的标识符,防止在某个函数中,在不经意中改变了它的值,使整个程序的结果出现错误。

    4.外部变量的使用 extern

    前面已经介绍了全局变量的作用域是所在的整个文件,而一个文件中的全局变量的作用域还可以扩展到其他文件。即一个文件中的全局变量可以在另一个文件中作为外部变量使用。某个文件中引用另一个文件中的全局变量,只要用extern声明,说明这个变量是在其他文件中已经定义过的外部变量。那么,在该文件中不会为外部变量分配内存。C语言中,用extern说明一个外部变量。语句格式如下:

    extern 类型说明符 外部变量名;
    

    例如:假如程序模块file1.c中定义了全局变量

    int students;
    

    如果在另一个程序模块file2.c中的函数fun()中,需要使用students变量

    fun1()
    {
    extern int students;
    }
    

    这里,“extern int students;”是外部变量说明语句。
    这样,通过外部变量说明语句,全局变量的作用域可以扩展到另一个模块文件的fun1()中,如果外部变量说明语句写在文件的头部,就可在该文件的任何函数内对students进行操作。

    extern int students;
    funl()
    {students=30;}
    fun2()
    {students+=21;}
    

    在funl和fun2中都引用了外部变量students。

    全局变量就是外部变量。前面分别介绍全局变量和外部变量,只是为了突出作用域和作用域扩展的问题。从定义变量的角度看,定义全局变量和外部变量是同一个概念。完整的定义形式是:

    [extern] 类型说明符变量名,变量名,….
    

    [extern]可以省略。它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。

    int a,b;
    等效于:
    extern int a,b;
    
    展开全文
  • 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。 符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。 符号常量在使用之前...

     

    1、 常量

    常量指定的是在软件编程过程中不能给赋值且值不能被改变的量。一般包括数字、字符、字符串常量等。

    例如:整型常量:12、0、-3;

              实型常量:4.6、-1.23;

              字符常量:‘a’、‘b’。

              标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。

             符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。

            符号常量在使用之前必须先定义,其一般形式为:

                     #define 标识符 常量

                     其中#define也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。

     

    2、 变量

    顾名思义就是在程序运行的时候可以给变的量称为变量,变量一般是我们在编写程序的时候自己定义的。

    定义方式如下:

    变量类型  变量名;

    变量类型指的是定义的变量的类型,一般变量的类型包括基本数据类型、指针类型、复杂类型等。

    变量名表示的是定义的变量的名称。

    一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。

    例如:

    int a;//表示定义一个int 型的变量a。

    a = 100;//表示对变量a的值进行给变,将其赋值为100.

    通过这两个语句我们就定义了一个变量a,变量a的值为100.

    其他类型的变量:

    char b;//char型变量b

    float c;//定义一个float类型的变量c

    变量根据作用域的不同分为全局变量和局部变量,全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。

    变量类型

    变量范围

    局部变量

    局部变量的作用域是作用域是自变量定义到当前函数体结束。

    全部变量

    整个函数

    我们定义的变量都有一个生命周期和作用域,一般不同方式定义的变量的生命周期和作用域不一样。

    作用域指定但是变量的使用范围,不同的作用域可以定义相同名的变量。使用的时候有限使用离得最近的变量。不同作用域的相同名称的变量不会相互影响。

    生命周期指的是一个变量从创建到销毁的时间,称为生命周期。

     变量的定义形式作用域生命周期
    局部变量static修饰的局部变量一对{}内({}称为一个函数体)整个程序运行期间
    普通的局部变量一对{}内     ({}称为一个函数体)从变量的定义到当前函数运行完成
    全局变量 static修饰的全局变形量当前文件可以使用,其他文件使用extern声明也不能调用整个函数运行期间
    普通的全局变量整个项目可以使用(非当前文件需要使用extern声明)整个函数运行期间
     extern声明的变量整个项目文件都可以使用整个程序运行期间
     extern声明函数整个程序整个程序运行期间
     static修饰函数当前文件整个程序运行期间

    需要注意的是static修饰的局部变量只能初始化一次,但是可以进行多次赋值。
        

    变量数据类型的转换

    变量在传递值的过程中,有可能会在不同数据类型之间传递,这样的话就需要对数据类型进行转换。数据类型的转换方式有两种。

    1)隐式转换也称做自动转换(数据类型所占字节小于要转数据类型)

    例如:

    char ch = 'c';
    int a = ch;//这是将一个char类型的数据复制个一个int型的数据,这属于隐式转换
    
    
    double b = a;//将int型的a数据转化为double类型
    

    2)强制转换(大转小),强制转换的时候,一定要在转换的变量之前增加强制转换的数据类型。如一下例子需要在a变量之前增加char类型强制转换

    例如:

    int a = 100;
    char c = (char)a;//这是将一个int型的数据强制转换成char型,超出char型的数据将会丢失


      
      

    3、 函数

    1)函数的概念

    函数指的是一个程序的集合,专门用于实现某一个功能的代码块。在程序的编写中使用函数可以提高代码的可阅读性和增加代码的可维护性。

    从函数定义的角度看,函数可分为库函数和用户定义函数两种。库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。

    根据函数的返回值和函数有无参数可以分为以下四种函数的形式。有参无返、有参有返、无参无返和无参有返。

    2)函数的定义

    定义函数需要注意两个方面,那就是函数的返回类型和函数参数的类型。我们所能定义和使用的变量类型都可以作为函数的返回值和函数参数的类型。

    例如:int、 float 、double、 long 、 数组、 结构体和枚举等多可以作为函数的返回值和参数。后面会陆续介绍。

    1 无参返函数的定义形式

        类型标识符 函数名()
       { 
            声明部分
           语句
        }

    其中类型标识符和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。 该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。

    函数参数一般是通过return返回的。

      例如:

    
    int fun()
    {
        函数体;
        return 1;
    }

    此例子表示定义了一个有返无参的函数,返回值为int类型。

    2 有返有参函数定义的一般形式

     类型标识符 函数名(形式参数表列)
     { 
            声明部分
            语句
     }

    其中类型标识符和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。 该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个括号。括号中的形式参数列表就是需要传递的参数{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。

    例如:

    int fun( int a,int b)
    {
        函数体;
        return 1;
    }

    此例子表示定义了一个有返有参的函数,返回值为int类型。参数列表为int a,int b。a和b的值是传递到函数中取的。

    3 无返有参函数定义的一般形式

       void 函数名(形式参数表列)
       { 
           声明部分
           语句
       }

     

    其中void 标识符指明了本函数的类型,本函数是一个返回为空类型的函数,因此本函数是没有返回指的。函数名是由用户定义的标识符,函数名后有一个空括号。其中无参数,但括号不可少。{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。

    例如:

    void fun( int a,int b)
    {
        函数体;
    }

    此例子表示定义了一个无返返有参的函数,返回值为void类型。参数列表为int a,int b。a和b的值是传递到函数中取的。

    4 无返无参函数定义的一般形式   

    void 函数名()
    { 
        声明部分
        语句
    }

     

    其中void 标识符指明了本函数的类型,本函数是一个返回为空类型的函数,因此本函数是没有返回指的。函数名是由用户定义的标识符,函数名后有一个空括号。其中无参数,但括号不可少。{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。这种函数一般用于对一些器件或者堆空进行初始化使用。

    例如:

    void fun()
    {
        函数体;
    }

    此例子表示定义了一个无返返有参的函数,返回值为void类型。

    需要注意的是如果调用的函数是有返函数,那么在函数体中必须要有一个return语句返回返回值。

    3)函数的调用

    在程序中是通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。

    函数调用的一般形式为:

        函数名(实际参数表);

    对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。

    在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。

    其一般形式为:

            类型说明符 被调函数名(类型 形参,类型 形参…);  

    或为:

            类型说明符 被调函数名(类型,类型…);  

    括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。

    例: main函数中对max函数的说明为:

            int max(int a,int b);

    或写为:

            int max(int,int);

    但是有以下几个情况需要对函数进行声明:

    A、如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。

    B、当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。

    C、如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。

     

    在C语言中,可以用以下几种方式调用函数:

    A、函数直接作为表达式进行调用,这种函数一般都是针对有返回值的函数的一种调用方式。例如 :int a = fun(a,b);fun函数是一个有返回值的函数,返回值为int类型。

    B、函数语句是直接将调用的函数当成一个语句进行适应,这种方式是用于没有返回值的函数。例如:fun(a,b);fun函数是一个没有返回值的函数。

    C、函数也可以当做另一个函数的实参进行使用。但是这种调用方式和第一种一样都是针对有返回值的函数进行调用的。例如:fun(fun1(a,b),c);fun1是一个又返回值的函数。

    D、对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。

     

    4)函数嵌套调用函数

    C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数

    例如:

    
    fun()
    {
        ……
        fun1(a,b);//调用函数fun1
        ……
    }
    
    fun1(int a,int b)
    {
            ……
         fun2();//调用函数fun2
            ……
    }
    
    fun2()
    {
        函数体;
    }

    以上例子就是一个函数嵌套调用的例子,首先函数fun()调用fun1(int a,int b)函数。而fun1(int a,int b)函数有调用fun2()函数。

    4)函数递归调用函数

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。

    例如有函数f如下:

    int fun(int x)
    {
          int y;
          z=fun(y);//递归调用函数
          return z;
    }

    这个函数是一个递归函数。但是运行该函数将无休止地调用其自身,这当然是不正确的。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。下面举例说明递归调用的执行过程。

    需要注意的是如果使用递归调用函数,如果没有函数出口,那么可能会造成内存的溢出导致软件崩溃。

     

    展开全文
  • Python变量常量和值 在本教程中,您将学习Python变量常量、文字和它们的用例。 Python变量 变量是用于在内存中存储数据的命名位置。把变量看作是一个容器是很有帮助的,它保存着可以在程序中稍后更改的数据。 ...
  • 常量变量、向量、矩阵 常量应该是比较容易理解的一个数学概念。从小我们对于年龄、大小、高低、远近等概念有比较直观的感受,并且知道这些概念会至少在一段时间内不会变化,比如说妈妈买了十个苹果,无论放在茶几...
  • C语言中const修饰的量是常变量,它普通变量的编译方式一样,唯一的区别是常变量定义后不能做左值。C++中const修饰的才是常量。 1、 const修饰的变量常量还是变量 对于这个问题,很多同学认为const修饰的变量是...
  • Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间...
  • Python常量|变量

    2020-09-11 21:00:40
    (3)在实际项目中,常量首次赋值后,还是可以被其他代码修改的。 2、变量赋值 2.1、保留字 (1)保留字不可以作为变量、函数、类、模块和其他对象的名称来使用。 (2)以上地方使用了保留字会报错。 (3)另外...
  • 介绍C语言变量常量,探讨变量常量之间的区别,简述全局变量和局部变量的作用范围以及区别,简述变量的作用域和声明周期,简述常量的分类,探讨const修饰的常变量与其他常量以及变量的区别,介绍数据类型
  • 这一节课来学习一下常量变量和数据类型   首先说一下什么是量 量是一种会占用磁盘空间或内存空间的数据,量一般分为地址和值两部分 地址: 量在计算机中存储的位置 值: 能被用于运算的数据 简而言之,量可以...
  • C语言入门(4)——常量变量与赋值 对于基本数据类型量,按其取值是否可改变又分为常量变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可数据类型结合起来分类。 常量...
  • Swift学习之一:常量与变量

    千次阅读 2014-06-07 23:17:15
    常量与变量都会有一个关联的名字(如maximumNumberOfLoginAttempts或者welcomeMessage), 有特定的类型(如数字10或者字符串"Hello")。常量的值一旦设置就不能再修改,而变量的值 在将来是可以修改为不同的值的。 ...
  • 常量变量、字面量的区别

    千次阅读 2018-03-02 09:59:17
    原创链接 ...从定义到实际例子,这次全面搞清楚,以后就省的定义混淆。 那么我就首先来看了例子,有个大致的了解,再去看那些生硬的定义。 c/c++ code int a; //变量 const int b = 10; //b为常量...
  • 程序中数据最基本的存储单位就是变量,...此外,在某些时候,虽然声明了一个变量,但却不希望这个变量的数值被修改,这种永远不会被修改的量,就称为常量。掌握变量常量的使用是使用任何一门计算机语言所必备的基础
  • 在c\c++中,静态变量(static)和常量(const)很容易混淆,本文通过一点粗浅的认识,写写static和const. 常量(const 类型) const类型的值是不能被修改的,但是,这个不能修改,意思是const 修饰的部分是不...
  • 字面量,常量变量之间的区别?

    千次阅读 2019-04-13 16:06:59
    字面量,常量变量之间的区别? 2016年09月18日 11:42:22贺贺V5阅读数:1314 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010130282/article/details/52573119 经常看到这三...
  • C#中变量常量

    2017-12-25 15:19:11
    编写 程序离不开变量,下面将介绍:变量的声明、变量的初始化、变量的作用域、常量。 一、变量的声明 1、数据类型和变量名 : datatype identifier 如: int a ; 注意:C#区分大小写,即 a 和 A 是两个不同的...
  • keil for arm中: staticconstuint8_ts_acBmpLogo030[len]__attribute__((at(0X800F000)))={0x80,0xC0,0xC0,0xC0,0xC0,0x80,xxxxxxx} 案例演示 下面我们用一个例子演示一下,...将一个const常量放置到0x0000100...
  • 变量常量和函数

    千次阅读 2014-06-23 17:11:39
    1、使用typedef来创建别名 eg:typedef unsigned short int ...3、将一个字符(如字母a)赋给char变量时,该变量实际存储的是一个0~255的ASCII码数值。 4、转义字符:\a响铃 \b退格 \f换页 \n换行 \r 回车 \t 制表 \
  • 文章目录一、变量1.1、变量声明1.2、变量初始化1.3、变量赋值1.4、匿名变量二、常量2.1、字面常量2.2、常量定义2.3、预定义常量 更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页 变量是...
  • C#之变量与常量

    2017-03-17 10:33:49
    C#之变量与常量  变量常量  变量常量在程序运行时,都会被加载到内存中。  变量:在编写程序时,需要将数据存储到内存中,这种存储数据的内存单元,就被称为变量。  常量变量的一种特殊类型,除了存储...
  • java的变量常量以及常量

    千次阅读 2017-10-24 17:39:10
    首先变量名和常量名都是用户自行定义的标志符,遵循先定义后使用的原则,常量变量的区别是常量之后会不会改变 变量 占据着内存的某一存储区域,该区域有自己的名称和数据类型,该区域的数据可以在同一...
  • 变量常量 的区别

    2016-07-05 12:35:46
    变量之所以重要,是因为变量是编程语言中数据的符号标识和载体。变量是内存或寄存器中用一个标识符命名的存储单元,可以用来存储一个特定类型的数据,并且数据的值在程序运行过程中可以进行修改。可见,变量首先是一...
  • Go 语言编程 — 变量与常量

    千次阅读 2020-07-05 12:19:50
    目录 文章目录目录变量(var)指定数据类型的变量声明根据初始化... C 语言一般,可以在一条语句中完成变量的声明、定义以及初始化。如果没有初始化,则变量默认为零值。 示例: package main import "fmt" func
  • 什么是静态常量(Const)和动态常量(Readonly) 静态常量(Const)和动态常量(Readonly)之间的区别 动态常量(Readonly)被赋值后不可以改变 总结 什么是静态常量(Const)和动态常量(Readonly)  先解释下...
  • 问题: const变量 & 常量为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?const int n = 5;int a[n]; 答案分析: 1)、这个问题讨论的是“常量“只读变量”的区别。...
  • 常量 常量(Constant)是程序中最基本的元素,有字符(Character)常量、 ...下面看一个例子: printf("character: %c\n integer: %d\n floating point: %f\n", '}', 34, 3.14);    常量在程序加载内存的常量
  • String类和常量池内存分析例子以及8种基本类型

    万次阅读 多人点赞 2019-01-21 19:52:51
    该篇例子几乎涵盖了目前所有能解决的类型,以一种通俗的语言讲解出来。当然如果JVM内存基本问题不太会可以看这里:JVM内存的基本问题 基本问题 String类和常量池内存分析 8种基本类型的包装类和常量池 String ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,263
精华内容 58,905
关键字:

常量与变量的实际例子