目录
、
接初识C语言(二)
十二、常见关键字
关键字又称保留字,是C语言规定的、赋予特定含义和有专门用途的表示符。C语言中共有32个关键字。如表所示:
类别 | 关键字 |
数据类型关键字(12个) | char, double, enum, float, int, long, short, signed, struct, union, un-signed, void |
控制语句关键字(12个) | break, continue, case, do, default, else, for, goto, if, return, switch, while |
存储类型关键字(4个) | auto,extern, register, static |
其他关键字(4个) | const, sizeof, typedef, volatile |
12.1关键字typedef
typedef顾名思义是类型的定义,这里应该理解为类型重命名。
代码举例:
#include<stdio.h>
//typedef 的应用
typedef unsigned int un_sint;
int main()
{
//num1和num2的类型是一样的,都是无符号整型
un_sint num1 = 0;
unsigned num2 = 0;
return 0;
}
12.2关键字static
在C语言中static是用来修饰变量和函数的
1.修饰局部变量-称为静态局部变量
2.修饰全局变量-称为静态全局变量
3.修饰函数-称为静态函数
12.2.1修饰局部变量
代码举例:
//static修饰局部变量
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
void test1()
{
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
//代码1 //打印十个1
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
printf("\n");
//代码2 //大印1 2 3 4 5 6 7 8 9 10
for (i = 0; i < 10; i++)
{
test1();
}
return 0;
}
由上述代码可知,static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
12.2.2修饰局部变量
代码1:
代码2:
由上述代码可知,一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能再其他源文件内使用。
12.2.3修饰函数
static修饰函数,使得这个函数只能在本源文件内使用,不能在其他源文件中使用。这与static修饰全局变量的作用一样。同样在编译时会发生连接性错误。
十三#define定义常量和宏
这里使用代码来讲解:
//定义全局变量
static int val = 10;
//#define定义表示符常量
#define MAX 1000
//#define定义宏
#define ADD(x,y) ((x)+(y))
#include<stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10 * ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
代码中的ADD(2,3)会被替换成((2)+(3)),这就是宏的替换。
十四、指针
指针是C语言中的一个重要概念,它能有效的表示和处理复杂的数据结构,特别善于处理动态数据结构,正确而灵活的使用指针可以有效的实现一些重要的功能,如动态内存的分配,从函数获得多个返回值等。指针用法灵活,能使程序更加的简洁、高效;同时,指针也是一个非常容易引起混淆的概念,使用不当会导致一些隐蔽而严重的程序问题。
程序运行时,变量存放在内存中,不同的变量存放在内存不同的位置,这个位置是可以标示的,在C语言中,使用指针来标示变量在内存中的“位置”。
指针与变量的关系类似于门牌号码与房屋的关系。从指针的角度看,指针标示了内存中的一个“位置”,在这个位置上有一个变量;从变量的角度看,指针标示的是变量在内存中的“位置”,从这个角度看,指针的作用类似于数组的下标。也就是说,系统可以通过指针来找到变量在内存中的位置,从而对变量进行操作。
14.1内存
要理解指针,就必须了解内存的使用方式:
1、内存以字节为单位,一个字节就是一个内存单元;每个内存单元都有一个不重复的编号,称为内存地址,内存地址是一个无符号整数。
2、单个变量(包括数组)按照其数据类型被分配一个或多个内存单元,这些内存单元在内存地址上是连续的,变量的值存放在这些内存单元中。
3、分配给单个变量的内存单元中,第一个内存单元的地址,称为变量的地址或首地址。
C语言程序中所定义的每一个变量,都会被分配若干个连续的内存单元,变量的值就存放在这些内存单元中;变量被分配的内存单元数量由变量的类型决定;除了共用体之外(共用体后续文章会讲到),不同的变量使用不同的内存单元。
如:定义一个整型变量和一个double类型的变量,两个变量在内存中的分配方式如下图表示:
int a = 10; double b = 1.0;
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
地址是如何存储的呢?那就是要定义指针变量
#include<stdio.h>
int main()
{
int a = 0;
//定义了整型指针,把a的首地址赋给了指针变量p
int* p = &a;
return 0;
}
指针的应用:
int main()
{
int a = 10;
int* p = &a;
printf("%d\n", *p); //10
*p = 20;
printf("%d\n", *p); //20
return 0;
}
指针变量也可以是其他数据类型,那么不同类型的指针变量它们的大小是怎么样的呢?
14.2指针变量的大小
代码举例:
int main()
{
printf("%d\n", sizeof(char*)); //8
printf("%d\n", sizeof(int*)); //8
printf("%d\n", sizeof(short*));//8
printf("%d\n", sizeof(float*));//8
return 0;
}
可以看到,不管是什么类型的指针变量,它们的大小都是8个字节,其实,指针大小在32位平台是4个字节,64位平台是8个字节。
十五.结构体
结构体的概念及定义
结构体是将彼此相关的、类型不同的数据组合在一起的构造数据类型,它是由若干成员(也称为结构分量)组成的,每一个成员的数据类型可以是基本数据类型,也可以是构造类型。在使用某个结构体之前必须先声明它,即根据需要构造它。声明结构类型的一般形式为:
struct 结构名
{
类型名 成员名1;
类型名 成员名2;
……
类型名 成员名3;
}
代码举例:
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
//结构体初始化
//打印结构体信息
int main()
{
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
return 0;
}
初识C语言模块结束,加油!