暂时无法在飞书文档外展示此内容
1、C 实例 – 成绩录入
#include <stdio.h> //头文件
//空白行
/* 我们的第二个 C 程序 */ //注释
int main() //main 函数
{ //函数体开始
int score = 0; //变量
printf("请输入成绩:"); //输出语句
scanf("%d", &score); //输入语句
printf("成绩是:%d\n", score); //输出语句
return 0; //结束并返回语句
} //函数体结束
1.1、C 实例 – 成绩录入中的变量
数据类型 + 变量
int score = 0; //变量
2、简介
2.1、变量(Variable)的定义
**变量的定义:**是计算机程序运行过程中其值可以发生改变的量。
变量的深层定义:变量其实只不过是程序可操作的存储区的名称。变量指向某一块存储的区域。
C 中每个变量都有特定的数据类型,数据类型决定了变量存储的大小和布局。
基于前一章(2.5)C 语言编程入门 – C 数据类型 讲解的基本数据类型,有以下几种基本的变量类型:
2**.2、变量的作用**
存储程序运行时,需要存储一些可能会变化的数据。
3、变量的名称
是由字母、数字和下划线字符组成。
- 就是之前基础语法里说的
标识符。 - 变量的名字要根据实际情况的需要,起⼀个有意义的名字。
变量命名的⼀般规则:
- 以字母 A-Z 或 a-z 或下划线 _ 开始,后跟 0 个或多个字母、下划线和数字(0-9)。
- 不能以数字开头。
- ⻓度不能超过 63 个字符。
- 变量名中区分大小写的。
- 变量名中不允许出现标点字符,比如 @、$ 和 %。
- 不能使用基于之前(2.4)C 语言编程入门 – C 基础语法 讲解的关键字。
对于关键字,不用刻意去记,因为代码写多了,就会记得了,不记得时打开文档查即可。
4、变量的定义
变量的定义的基本语法变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:
<数据类型> <变量名> ; type variable;
<数据类型> <变量名 1> [ , <变量名 2> , <变量名 3> , …] ;
type variable1,variable2,variable3,…;
type 必须是一个有效的 C
数据类型,可以是 char、short、int、float、double 或任何用户自定义的对象。variable 可以由一个或多个
标识符名称组成,多个标识符之间用逗号分隔。
下面列出几个有效的定义:
int score; //表示定义了一个整型变量 score
char Aa1, Bb2, Cc3; //表示定义了三个字符型变量,分别为 Aa1, Bb2, Cc3
float f1, f2_1; //表示定义了二个双精度实型变量,分别为 f1, f2_1
double x, y, z; //表示定义了三个双精度实型变量,分别为 x, y, z
5、变量的初始化
变量的初始化是在定义变量的同时为其赋予一个初始值(定义变量并初始化)。
变量的初始化可以在定义时进行,也可以在后续的代码中进行(定义变量后再初始化)。
5.1、定义变量并初始化
初始化由变量后面跟着一个等号“=”,后跟一个常量表达式组成,如下所示:
type variable = value;
其中,type 表示变量的
数据类型,variable 是变量的名称,value 是变量的初始值。
下面列举几个实例:
int x = 10; // 定义整型变量 x 并初始化值为 10
float pi = 3.14; // 定义浮点型变量 pi 并初始化值为 3.14
char ch = 'A'; // 定义字符型变量 ch 并初始化值为字符 'A'
5.2、定义变量后再初始化
在变量定义后的代码中,可以使用赋值运算符 = 为变量赋予一个新的值。
type variable; // 变量定义,此时 variable 的值是未知的
variable = new_value; // 变量初始化
其中,type 表示变量的
数据类型,variable 是变量的名称,new_value 是变量的初始值。
下面列举几个实例:
int x; // 先定义整型变量 x 再初始化变量 x 值为20
x = 20;
char ch; // 先定义字符型变量 ch 再初始化变量 x 值为字符'B'
ch = 'B';
5.3、变量定义后不立刻初始化导致的问题
在 C 语言中,如果变量没有显式初始化,那么它的默认值将取决于该变量的类型和其所在的作用域。
5.3.1、对于全局变量和静态变量
全局变量和静态变量(在函数内部定义的静态变量和在函数外部定义的全局变量),它们的默认初始值为零。
以下是不同类型的变量在没有显式初始化时的默认值:
- 整型变量(int、short、long 等):默认值为 0。
- 浮点型变量(float、double 等):默认值为 0.0。
- 字符型变量(char):默认值为’\0’,即空字符。
- 指针变量:默认值为 NULL,表示指针不指向任何有效的内存地址。
- 数组、结构体、联合等复合类型的变量:它们的元素或成员将按照相应的规则进行默认初始化,这可能包括对元素递归应用默认规则。
5.3.2、对于局部变量
局部变量(在函数内部定义的非静态变量)不会自动初始化为默认值,它们的初始值是未定义的(包含垃圾值)。因此,在使用局部变量之前,应该显式地为其赋予一个初始值。
**注意:**总结起来,C 语言中变量的默认值取决于其类型和作用域。全局变量和静态变量的默认值为 0,字符型变量的默认值为 \0,指针变量的默认值为 NULL。而局部变量没有默认值,其初始值是未定义的,可能包含任意的垃圾值!
因此,为了避免不确定的行为和错误,建议在使用变量之前进行初始化。
5.4、四种定义全局变量
extern int a; // 声明一个全局变量 a
int a; // 定义一个全局变量 a
extern int a = 0; // 定义一个全局变量 a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间
int a = 0; // 定义一个全局变量 a,并给初值
声明之后你不能直接使用这个变量,需要定义之后才能使用。
第四个等于第三个,都是定义一个可以被外部使用的全局变量,并给初值。
- 糊涂了吧,他们看上去可真像。但是定义只能出现在一处。
也就是说,不管是 int a 还是 int a=0 都只能出现一次,而那个 extern int a 可以出现很多次。 - 当你要引用一个全局变量的时候,你就要声明 extern int a 这时候 extern 不能省略,因为省略了,就变成 int a 这是一个定义,不是声明。
6、其他类型的变量
比如枚举、指针、数组、结构、共用体等等,这将会在后续的章节中进行讲解。
7、C 中的变量声明 extern( 扩展进阶)
变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
变量的声明有两种情况:
- 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
- 2、另一种是不需要建立存储空间的,通过使用
extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。
除非有 extern 关键字,否则都是变量的定义。
extern int i; //声明,不是定义
int i; //声明,也是定义
实战举例:
如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
addtwonum.h 文件代码:
#include <stdio.h>
/*外部变量声明*/
extern int x ;
extern int y ;
int addtwonum()
{
return x+y;
}
test.c 文件代码:
#include <stdio.h>
#include "addtwonum.h"
/*定义两个全局变量*/
int x = 1;
int y = 2;
int addtwonum();
int main(void)
{
int result;
result = addtwonum();
printf("result 为: %d\n", result);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
result 为: 3
8、C 中的左值和右值(扩展进阶)
C 中有两种类型的表达式:
- **左值(lvalue):**指向内存位置的表达式被称为左值表达式。
左值可以出现在等号的左边或右边。
**比如:**变量是左值,因此可以出现在等号的左边或右边。
下面这个就是有效的语句,编译正确:
int g = 20;
int g = value;
- **右值(rvalue):**右值指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式。
右值可以出现在等号的右边,但不能出现在等号的左边。
**比如:**数值型的字面值是右值,因此不能被赋值,不能出现在等号的左边。
下面这个就不是有效的语句,编译错误:
10 = value;
10 = 20;
每日一更!
公众号、优快云等博客:小菜狗编程笔记
谢谢点赞关注哈!目前在飞书持续优化更新~
日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!
1039

被折叠的 条评论
为什么被折叠?



