流心
发布于 2024-04-15 / 1 阅读
0

C 变量

变量是程序可操作的存储区的名称, C 语言中每个变量都有特点类型;例如 int char,类型决定了变量存储大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上

变量的名称可以有字母、数字和下划线组成,但是他必须以字母或下划线开头,大写字母和小写字母是不同的

类型

描述

char

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

int

整型,4 个字节,取值范围 -2147483648 到 2147483647。

float

double

void

表示类型的缺失。

C 中的变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储,变量定义指定一个数据类型

type value_list;

type 表示变量的数据类型,如整型、浮点型、字符型、指针等也可以是定义的对象

value_list 可以有一个或多个变量名称组成,多个变量之间用 , 分割,变量由字母数字和下划线组成

  • 定义整型变量

int num ;

  • 定义浮点型变量

float salary ;

  • 定义指针

int *ptr ;

  • 定义多个变量

int num , sum ;

变量初始化

在 C 语言中,变量的初始化是定义在变量的同时赋予初始值,变量的初始化可以在定义进行,可以在后续代码进行

如:

type value_name= zs ;

type 表示变量的数据类型, value_name 是变量名称,zs 变量初始值

例如:

int age = 10;

float pi = 3.14 ;

char name = "tom" ;

int d = 1 , f = 5;

byte i = 2 ;

// 声明外部变量
extern int d;
extern int f;

后续初始化变量

在变量定义后的代码中,可以使用赋值运算符 = 为变量赋予一个新的值

int x ;
x = 20 ;

float = pi ;
pi = 3.14 ;

char name;
name = 'tom'

变量不初始化

在 C 语言中,如果变量没有显式初始化,那么它的默认值将取决于该变量的类型和其所在的作用域。

对于全局变量和静态变量(在函数内部定义的静态变量和在函数外部定义的全局变量),它们的默认初始值为零。

以下是不同类型的变量在没有显式初始化时的默认值:

  • 整型变量(int、short、long等):默认值为0。

  • 浮点型变量(float、double等):默认值为0.0。

  • 字符型变量(char):默认值为'\0',即空字符。

  • 指针变量:默认值为NULL,表示指针不指向任何有效的内存地址。

  • 数组、结构体、联合等复合类型的变量:它们的元素或成员将按照相应的规则进行默认初始化,这可能包括对元素递归应用默认规则。

局部变量(在函数内部定义的非静态变量)不会自动初始化为默认值,它们的初始值是未定义的(包含垃圾值)。因此,在使用局部变量之前,应该显式地为其赋予一个初始值。

C 语言中变量的默认值取决于其类型和作用域。全局变量和静态变量的默认值为 0,字符型变量的默认值为 \0,指针变量的默认值为 NULL,而局部变量没有默认值,其初始值是未定义的。

C 中的变量声明

变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

变量的声明有两种情况:

  • 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

  • 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。

除非有 extern 关键字,否则都是变量的定义。

extern int i; //声明,不是定义
int i; //声明,也是定义

C 中的左值(Lvalues)和 右值(Rvalues)

C 中有两种类型的表达式:

  1. 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。

  2. 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:

int g = 20;

但是下面这个就不是一个有效的语句,会生成编译时错误:

10 = 20;