C语言 - 变量



变量只不过是程序可以操作的存储区域的名称。C语言中的每个变量都有一个特定的类型,该类型决定变量内存的大小和布局;可以存储在该内存中的值的范围;以及可以应用于该变量的操作集。

为什么我们在 C 语言中使用变量?

C语言中的变量是用户为计算机内存中某个特定位置分配的名称,该位置是大量可随机访问的位置的集合,每个位置可以容纳单个位。内存中的每个位置都由一个唯一的地址标识,该地址以二进制(或为方便起见使用十六进制)格式表示。

由于通过引用其二进制形式的位置来存储和处理内存中的数据非常麻烦,因此像 C 这样的高级语言允许使用用户定义的名称或变量来标识这些位置。

您可以找到合适的助记符标识符并为其赋值,而不是标识一个空闲内存位置并为其赋值。C编译器将选择一个合适的位置并将其绑定到您指定的标识符。

C语言变量的命名约定

变量名必须以字母(大写或小写)或下划线 (_) 开头。它可以包含字母(大写或小写)、数字和下划线字符。C语言中的变量名不能包含其他字符。

C语言中的变量名区分大小写。例如,“age”与“AGE”不同。

ANSI 标准认可变量名长度为 31 个字符。尽管您可以选择具有更多字符的名称,但只识别前 31 个字符。使用描述性变量名来反映其意图存储的值被认为是一种良好的实践。避免使用可能导致混淆的非常短的变量名。

C 是一种静态类型语言。因此,必须在变量名称之前声明变量的数据类型。变量可以在函数内(局部变量)或全局声明。可以在单个语句中声明多个相同类型的变量。

示例

根据上述规则和约定,以下是一些有效和无效的变量名

int _num = 5;        // valid integer variable
float marks = 55.50; // valid float variable
char choice = '0';   // valid char variable

// invalid variable name
// cannot use "-"
int sub-1 = 35;      

//invalid; must have data type
avg = 50;            

// invalid; name can be used for 
// declaration only once in a function
int choice = 0;

// Valid integer name
int sal_of_employee = 20000; 

// Valid because all are of same type
int phy, che, maths; 

// error because variables of 
// different types in same statement
int sal, float tax;

在 C 语言中,变量可以存储属于其识别的任何类型的数据。因此,变量的类型数量与C语言中的数据类型数量一样多。

序号 类型和描述
1

char

通常是一个八位字节(一个字节)。它是一种整数类型。

2

int

机器最自然的整数大小。

3

float

单精度浮点值。

4

double

双精度浮点值。

5

void

表示类型缺失。

C编程语言还允许定义各种其他类型的变量,例如枚举类型、指针类型、数组类型、结构体类型、联合体类型等。在本节中,我们只学习基本变量类型。

C语言中的变量定义

变量定义告诉编译器在哪里以及为变量创建多少存储空间。变量定义指定数据类型,并包含一个或多个该类型变量的列表,如下所示:

type variable_list;

这里,type必须是有效的 C 数据类型,包括 char、w_char、int、float、double、bool 或任何用户定义的对象;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;

示例:变量定义和初始化

请看以下示例

// declaration of d and f
extern int d = 3, f = 5;     

// definition and initializing d and f
int d = 3, f = 5;            

// definition and initializes z 
byte z = 22;

// the variable x has the value 'x'
char x = 'x';               

对于没有初始化器的定义:具有静态存储期的变量隐式初始化为 NULL(所有字节的值均为 0);所有其他变量的初始值未定义。

C语言中的变量声明

根据 ANSI C 标准,所有变量都必须在开头声明。不允许在第一个处理语句之后声明变量。尽管 C99 和 C11 标准修订已删除此规定,但它仍然被认为是一种良好的编程习惯。您可以声明一个变量以便稍后在代码中为其赋值,或者您可以在声明时初始化它。

示例:变量声明

// declaration with initialization
int x = 10; 

// declare first and assign later       
int y;             
y = 20;

// define and initialize two variables
int d = 3, f = 5;

// the variable x has the value 'x'
char x = 'x';      

一旦声明了某种类型的变量,就不能为其分配任何其他类型的变量值。在这种情况下,C编译器将报告类型不匹配错误。

变量声明向编译器保证存在具有给定类型和名称的变量,以便编译器可以在无需有关变量的完整详细信息的情况下继续进行进一步的编译。变量定义仅在编译时具有其含义,编译器在链接程序时需要实际的变量定义。

当您使用多个文件并在其中一个文件中定义变量时,变量声明很有用,这些变量在链接程序时可用。您将使用关键字“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

同样的概念也适用于函数声明,在声明函数时提供函数名,其实际定义可以在其他任何地方给出。例如:

// function declaration
int func();

int main() {

   // function call
   int i = func();
}

// function definition
int func() {
   return 0;
}

C语言中的左值和右值

C语言中有两种表达式

  • 左值表达式
  • 右值表达式

C语言中的左值表达式

引用内存位置的表达式称为“左值”表达式。左值可以出现在赋值运算符的左侧或右侧。

C语言中的变量是左值,因此它们可以出现在赋值运算符的左侧。

C语言中的右值表达式

术语“右值”指的是存储在内存某个地址处的数据值。“右值”是一个不能为其赋值的表达式,这意味着右值可以出现在赋值运算符的右侧,但不能出现在左侧。

数字字面量是右值,因此它们不能被赋值,也不能出现在左侧。

让我们看一下以下有效和无效的语句

// valid statement
int g = 20; 

// invalid statement 
// it would generate compile-time error
10 = 20;    

C语言中的变量可以根据以下参数进行分类

  • 数据类型 - int、float、char 或 struct 类型。

  • 作用域 - 全局变量或局部变量。

  • 存储类型 - 自动、静态、寄存器或外部。

我们将在本教程的后面学习局部和全局类型以及存储类型。

广告