[C语言必知|第一部分] C语言入门,这一条就够了 - 3️⃣语言构成
数据类型:
C语言中的数据类型用来定义变量的性质和存储空间的大小。常见的数据类型包括整型(int)
、浮点型(float、double)
、字符型(char)
,以及派生的复杂数据类型如结构体(struct)
和枚举(enum)
等。
常量与变量:
在C语言中,常量是指在程序执行期间值不会改变的数据。常量可以是字面值(如整数、浮点数、字符等)或使用const关键字进行声明。变量是用于存储和表示可变数据的标识符。 在使用变量之前,需要先声明并指定其数据类型。
注意: 变量名是由字母、数字和下划线组成
的标识符,且不能以数字开头
。变量名区分大小写,例如myVariable和myvariable是不同的变量名。
数组:
数组是相同数据类型的元素按一定次序排列而成的集合。在C语言中,数组使用方括号[]
来声明,并通过下标访问其中的元素。数组的大小在声明时确定,并且下标从0开始。
指针:
指针是用来存储变量地址的变量。通过指针,我们可以直接访问和操作内存中的数据。在C语言中,可以使用星号*
来声明指针变量,并通过取地址运算符&
获取变量的地址,或者通过解引用运算符*
访问指针指向的值。
字符串:
字符串是由字符组成的数组,以空字符'\0'
作为结束标志。在C语言中,可以使用字符数组或者指针来表示字符串,并通过一系列的字符串操作函数(如strcpy、strlen等)进行处理。
运算符:
C语言提供了各种各样的运算符,用于完成不同类型的运算任务。常见的运算符包括算术运算符(+、-、*、/等)、关系运算符(<、>、==等)、逻辑运算符(&&、||、!等)等。
算术运算符>逻辑运算符>赋值运算符
例如,表达式a + b * c
中,乘法运算符的优先级高于加法运算符,所以先计算b * c
,然后再与a
相加。如果要先计算a + b
,可以使用括号来改变优先级,如(a + b) * c
。
示例如下:
#include <stdio.h> int main() { int a = 10, b = 5, c = 2; int result; result = a + b * c; // 优先级:乘法 > 加法 printf("a + b * c = %d\n", result); result = (a + b) * c; // 优先级:括号 > 加法 > 乘法 printf("(a + b) * c = %d\n", result); result = a / b + c; // 优先级:除法 > 加法 printf("a / b + c = %d\n", result); result = a / (b + c); // 优先级:括号 > 加法 > 除法 printf("a / (b + c) = %d\n", result); result = a % b + c * 2; // 优先级:乘法 > 取模 > 加法 printf("a %% b + c * 2 = %d\n", result); result = (a % b) + (c * 2); // 优先级:括号 > 取模 > 乘法 > 加法 printf("(a %% b) + (c * 2) = %d\n", result); return 0; }
结果如下:
了解运算符的优先级可以帮助我们编写正确和清晰的表达式,并避免出现不必要的错误。
关键字:
关键字又称为保留字,就是已被C语言本身使用,不能作其它用途使用的字。 例如关键字不能用作变量名、函数名等标识符。
数据类型关键字:
short
:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long
:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long
:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed
:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned
:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict
:用于限定和约束指针,并表明指针是访问一个数据对象的初始且唯一的方式。(C99标准新增)
复杂类型关键字:
struct
:结构体声明。(K&R时期引入)
union
:联合体声明。(K&R时期引入)
enum
:枚举声明。(C89标准新增)
typedef
:声明类型别名。(K&R时期引入)
sizeof
:得到特定类型或特定类型变量的大小。(K&R时期引入)
inline
:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
存储级别关键字:
auto
:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。(K&R时期引入)
static
:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。(K&R时期引入)
register
:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。(K&R时期引入)
#include <stdio.h> int main() { register int i; // 声明一个寄存器变量 for (i = 0; i < 10; i++) { printf("%d ", i); } return 0; }
在上面的代码中,我们使用register关键字声明了一个整型变量i,然后在for循环中使用它进行迭代。
extern
:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(K&R时期引入)
const
:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。(C89标准新增)
volatile
:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。(C89标准新增)
这些概念是C语言中非常重要的基础知识,对于理解和编写C程序至关重要。
推荐阅读
-
3.3 Java 全栈开发前端+后端(全栈工程师进阶路径)--前端框架 VUE3 框架--企业应用程序--Vue 组合 API
-
Oracle12c 修改时区
-
设计模式 - 适配器、装饰和外观模式 - 3 种外观模式
-
2024 年 5 月 1 日 深部采煤中冲击地压危险预测的数学建模 C 问题 原文分享
-
Ponder-C++ Reflection 库入门 - 前言
-
[C/C++] -- 单例模式 - 2. 单例模式的实现
-
javascript基础从入门到专家系列第736期:常见的Fetch请求模式
-
Flume入门
-
vben 管理重置按钮单独获取点击重置图表(vue3)
-
自然语言处理实用入门 ---- 第 4 课:中文解析原理及相关组件介绍--《自然语言处理》中的主要解析算法、组件和服务 ...