目录
关键字typedef
关键字static
修饰局部变量
static修饰全局变量
用static修饰函数
总结:
register关键字介绍
#define 定义常量和宏
指针
内存
指针变量的大小
结构体
定义结构体
struct Stu为一个结构体类型,里面的为结构体变量
给结构体赋值
引用结构体变量
关键字typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
PS:就像一个人的小名一样,typedef是给变量类型安个小名
这里时给int类型重新安了一个小名叫a,即此时a等于int类型,我们可以用a来创建变量,并将它打印
#include
int main()
{
typedef int a; //类型重命名
a i = 10; //新名字来定义变量
printf("%d", i);
return 0;
}
关键字static
修饰局部变量在C语言中: static是用来修饰变量和函数的 1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
未使用static之前
使用static之后
我们发现,使用static之后,打印出的结果与之前有所不同,这是因为未使用static函数之前,每次打印完i之后,会把i的空间进行释放,当再一次进入的时候又会重新给i创建一个空间,并把i的初值赋为1,所以会打印10个1
使用static之后为什么能打印出1-10呢?
这是因为:static用来修饰局部变量时,会把局部变量放到静态区,此时每当打印完i后,即函数执行完后,静态区的i不会被释放,而回继续在这里保存着,当下一次再用到i时,i仍然以上一次出函数的值,作为初值,进行下一次 *** 作
static修饰全局变量前面未使用static之前的i在每次函数执行结束后会立即被释放,是因为这个临时变量i创建在了栈区,一出函数就被释放,而static修饰后将i放到了静态区,延长了i的生命周期,使i的生命周期几乎和主函数生命周期一样长
当我们在一个.c文件里创建了一个变量,并想在另一个.c文件里面使用时,我们要加extern来在要使用的.c文件里声明一下,才能加以使用
如下面这样:
这里我们在test1.c里创建了变量i,在test.c里使用变量i,并在test.c里面使用extern声明一下并使用
用static修饰外部变量之后
我们发现程序会报错
此时程序无法解析来自外部的变量i,但是我们在test1.c文件里使用i时却能正常使用
用static修饰函数这是因为:用static修饰全局变量之后,它会将局部变量的外部链接属性变为内部连接属性,意思就是用static修饰全局变量之后,你想在另一个.c文件里面使用这个变量的时候,会使用不了。
在一个.c文件引用另一个.c文件的函数且未使用static之前
打印正常
使用static之后
此时无法正常打印
而我们在.c文件使用static之后
此时可正常打印
总结:这是因为:当static修饰外部函数时,会使这个外部函数失去外部连接性,而保持内部链接性,因此才会报错
register关键字介绍当static修饰局部变量时,该变量会被放到静态区,在每次使用完之后不会被释放临时变量所用的内存,生命周期会延迟到程序结束。
当static修饰全局变量和函数时,全局变量和函数会失去外部链接性,而保持内部链接性,因此当static修饰全局变量和函数时在另一个.c文件里会无法引用
#define 定义常量和宏register时寄存器关键字
- register关键字只能作用于局部变量,不能作用于全局变量。
- register关键字指明将局部变量存储于寄存器中。
- register只是请求将这个变量存放到寄存器当中,但不一定能够请求成功
用define定义标识符常量
用define定义宏
注意:宏参数是无类型的
指针 内存内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。
打印a的地址
#include
int main()
{
int a=10; //定义变量a,开辟四个字节的空间
int *c=&a; //定义指针变量c,并将a的地址放入其中
printf("%d",*c); // 打印c地址中所1存放的数值
printf("%p",c) //打印c的地址
return 0;
}
&a含义:取出a的地址,&为取地址符号
用int *类型定义一个变量将a地址里所存放的数字,赋值给int *类型的变量c,
int * c=&a含义,int 说明c指向的对象是int类型,*说明p是指针变量,
指针变量的大小不管是什么类型的指针,都是在创建指针变量 如 char *a就是一个指针变量
指针变量是用来存放地址的
指针变量的大小取决于一个地址存放的时候需要大多空间
指针变量的大小跟系统的 *** 作位数有关。
结构体注:*c是指int *类型的变量c所在的地址中存放的变量。
c是指以int *为类型的指针变量所指向的地址。
定义结构体结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。
这里只能使用结构体来描述了。
这里电话用12个空间是因为,字符串里面\0也要占用一个空间
#include
struct Stu
{
char name[100]; //姓名
int age; //年龄
char sex[10]; //性别
char tele[12]; //电话
};
struct Stu为一个结构体类型,里面的为结构体变量
给结构体赋值
赋值方法:分别按照所定义的结构体内的变量类型,按顺序赋予相应的值
struct Stu a是定义一个变量a a是结构体类型struct Stu
引用结构体变量直接引用:用结构体变量a再加一个. 然后选择所对应的结构体变量
以指针的方式引用:用结构体名->进行应用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)