欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[C语言必知|第一部分] C语言入门,这一条就够了 - 3️⃣语言构成

最编程 2024-04-22 15:44:48
...

数据类型:

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程序至关重要。