变量只不过是我们的程序可以操作的存储区域的名称. C中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以存储在该存储器中的值的范围;以及可以应用于变量的操作集.
变量的名称可以由字母,数字和下划线字符组成.它必须以字母或下划线开头.大写和小写字母是不同的,因为C区分大小写.基于前一章中解释的基本类型,将有以下基本变量类型 :
Sr.No. | Type&说明 |
---|---|
1 | char 通常是一个八位字节(一个字节).这是一个整数类型. |
2 | int 机器最自然的整数大小. |
3 | float 单精度浮点值. |
4 | double 双精度浮点值. |
5 | void 表示缺少类型. |
C编程语言也允许定义各种其他类型的变量,我们将在后续章节中介绍它们,如枚举,指针,数组,结构,联合等.在本章中,我们只研究基本变量类型.
变量定义告诉编译器为变量创建的存储位置和数量.变量定义指定数据类型并包含该类型的一个或多个变量的列表,如下所示 :
type variable_list;
这里, type 必须是有效的C数据类型,包括char,w_char,int,float,double,bool或any用户定义的对象;和 variable_list 可以包含一个或多个用逗号分隔的标识符名称.这里显示了一些有效的声明 :
int i, j, k; char c, ch; float f, salary; double d;
行 int i,j,k; 声明并定义变量i,j和k;它指示编译器创建名为i,j和k的int类型的变量.
变量可以在其声明中初始化(赋予初始值).初始化程序包含一个等号后跟一个常量表达式,如下所示;
type variable_name = value;
一些例子是 :
extern int d = 3, f = 5;//声明d和f. int d = 3,f = 5;//定义和初始化d和f. byte z = 22;//定义并初始化z. char x ='x';//变量x的值为'x'.
对于没有初始化程序的定义:具有静态存储持续时间的变量用NULL隐式初始化(所有字节的值都为0);所有其他变量的初始值都是未定义的.
变量声明为编译器保证存在变量给定的类型和名称,以便编译器可以继续进行进一步编译,而无需有关变量的完整详细信息.变量定义仅在编译时有意义,编译器在链接程序时需要实际的变量定义.
当您使用多个文件时,变量声明很有用您可以在链接程序时可用的其中一个文件中定义变量.您将使用关键字 extern 在任何地方声明变量.虽然您可以在C程序中多次声明变量,但只能在文件,函数或代码块中定义一次.
尝试以下示例,其中变量已在顶部声明,但它们已在main函数内定义并初始化 :
#include <stdio.h> // Variable declaration: extern int a, b; extern int c; extern float f; int main () { /* variable definition: */ int a, b; int c; float f; /* actual initialization */ a = 10; b = 20; c = a + b; printf("value of c : %d \n", c); f = 70.0/3.0; printf("value of f : %f \n", f); return 0; }
编译并执行上述代码时,会产生以下结果 :
value of c : 30 value of f : 23.333334
同样的概念适用于函数声明,其中您在声明时提供函数名称,其实际定义可以在其他任何地方给出.例如 :
//函数声明 int func(); int main(){ //函数调用 int i = func(); } //函数定义 int func(){ return 0; }
C中有两种表达式;
左值 : 引用内存位置的表达式称为"左值"表达式.左值可以显示为作业的左侧或右侧.
rvalue : 术语rvalue是指存储在内存中某个地址的数据值.右值是一个不能赋值给它的表达式,这意味着右值可能出现右值,但不能出现在赋值的左侧.
变量是左值,因此它们可能出现在赋值的左侧.数字文字是右值,因此它们可能不会被分配,也不会出现在左侧.看看以下有效和无效的陈述 :
int g = 20;//有效声明 10 = 20;//无效的陈述;会产生编译时错误