11.常见关键字
关键字就是被C语言本身使用的,不能作其它用途使用的字。关键字不能用作变量名。
1、关键字auto用于说明自动变量,由于变量声明时默认情况下就是自动变量,所以很少使用。
2、volatile(易变的)表示该变量不经过赋值,其值也可能被改变(例如表示时钟的变量、表示通信端口的变量等)。
下面我会对常用的关键字进行解释讲解 对标红进行重点解释
C语言中的关键字
auto:声明自动变量 一般不使用
double:声明双精度变量或函数
float:声明浮点型变量或函数
int:声明整型变量或函数
short:声明短整型变量或函数
long:声明长整型变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
else:条件语句否定分支(与if连用)
switch:用于开关语句
case:开关语句分支
enum:声明枚举类型
register:声明寄存器变量
typedef:用以给数据类型取别名
char:声明字符型变量或函数
extern:声明外部变量是在其他文件中已经定义过了,可在当前文件使用
return:子程序返回语句(可以带参数,也可不带参数)
union:声明联合数据类型
const:声明只读变量(常变量)
unsigned:声明无符号类型变量或函数
signed:生命有符号类型变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句(可意会不可言传)
void:声明函数无返回值或无参数,声明无类型指针
default:开关语句中的‘其他’分支
goto:无条件跳转语句
sizeof:计算数据类型长度
volatile:说明变量在程序执行中可被隐含地改变
do :循环语句的循环体
while:循环语句的循环条件
static:声明静态变量
register
register用于告诉编译器将变量存储在CPU的寄存器中,以提高程序的执行效率。使用register关键字声明的变量称为寄存器变量。
使用register关键字声明变量时,需要注意以下几点:
1. 不能对寄存器变量使用&运算符,因为寄存器变量并不一定有一个内存地址。
2. 不能对寄存器变量使用sizeof运算符,因为寄存器变量在内存中没有对应的存储空间。
3. 编译器可以选择是否将变量存储在寄存器中,因此不能强制要求把变量存储在寄存器中。
static
static是C/C++中的一个关键字,它可用于修饰变量、函数和类成员。它的作用取决于它所修饰的对象类型。
1. 修饰变量:当static修饰局部变量时,该变量的生命周期被扩展到整个程序运行期间,但作用域仍然是当前的函数体。这意味着该变量只会被初始化一次,而不是每次函数被调用时都会被初始化。当static修饰全局变量时,该变量的作用域被限制在当前文件中,其他文件无法访问。
2. 修饰函数:当static修饰函数时,该函数的作用域被限制在当前文件中,其他文件无法访问。这种函数称为静态函数。
#include<stdio.h> void test() { int i = 0; i++; printf("%d", i); } void test1() { static int i = 0; i++; printf("%d", i); } int main() { int i = 0; for (i = 0; i < 5; i++) { test();//打印结果为11111 } printf("\n"); for (i = 0; i < 5; i++) { test1();//打印结果为12345 } return 0; }
在没有static修饰时 i 的值出函数时就会被销毁,每次进入都会重新创建并赋值。
而使用static修饰之后, i 出函数后的值不会被销毁,生命周期也扩展到了整个程序运行期间。
12.#define定义常量和宏
#define MAX 100//定义标识符常量 #define ADD(x,y) ((x)+(y))//定义宏 #include<stdio.h> int main() { int sum = ADD(3, 3); printf("%d\n", sum); sum = 6 * ADD(3, 3); printf("%d", sum); return 0; }
13.指针
内存是计算机中很重要的存储器,计算机中所有程序的运行都是在内存中进行的。
为了更有效的使用内存,于是就把内存划分成一个一个的小单元,每个内存单元大小是一个字节。
为了能更高效的访问到每个单元,于是就给内存单元进行编号,这些编号被称为内存单元的地址。(可形象理解为宿舍楼,地址就像是门牌号,内存单元就像是房间)
指针的使用
例如我们存储一个整形数字15,一个整形在内存中占4个字节(一个整形数字占4个内存单元),在取地址时,拿到的是4个字节中第一个字节的地址。
#include<stdio.h> int main() { int a = 15; int* p = &a;//p是指针变量,这里存放的是a的地址,a是整形,那p就是指向一个int类型的指针,int*是指针类型 *p = 30;//*解引用操作符,*p就是取地址内的数据,*p也就相当于a printf("%d", a);//输出结果为30 return 0; }
当然由整形为例也可推广到其他类型,指向的是字符型,那指针类型就是:char*。
指针变量的大小
#include<stdio.h> int main() { printf("%d", sizeof(int*)); printf("%d", sizeof(char*)); printf("%d", sizeof(short*)); printf("%d", sizeof(double*)); return 0; }
运行的结果都是一样的,在32位操作系统是4个字节,在64位操作系统是8个字节。
结构体
之前我们了解到数组,使用数组来存储连续的数据,但数组只能存储相同类型数据,而结构体可以存放不同类型的数据。
例如:
struct Stu { char name[20]; int age; char sex[5]; char id[15]; };
结构体初始化
struct Stu s={"zhangsan",20,"男","123456000"};//s是结构体变量,结构体是学生信息,s指代结构体中数据,.是结构体变量访问结构体成员 printf("%s %d %s %s",s.name,s.age,s.sex,s.id); struct Stu *ps=&s;//ps是指向结构体的指针 printf("%s %d %s %s",ps->name,ps->age,ps->sex,ps->id);//->是结构体指针访问结构体成员
以上便是本期全部内容,初识C语言系列完,后续将持续更新C语言深度解析,本系列是为了使初学者系统了解C语言,便于后续C语言的正式学习。感谢观看!