文章目录
- 常见关键字
-
1、 关键字 typedef
-
2、关键字static
- define 定义常量和宏
- 指针
- 结构体
前言
这是博主初识C语言系列的最后一篇,之后博主会更新更详细的关于C语言学习的知识。希望各位老铁多多支持。
一、常见关键字
1、 关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
简单来说就是给一个复杂类型重新起一个名字,方便使用。
2、关键字static
在C语言中: static是用来修饰变量和函数的:
1>. 修饰局部变量-称为静态局部变量
2>. 修饰全局变量-称为静态全局变量
3>. 修饰函数-称为静态函数
局部
static 修饰局部变量的时候 | ||
本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了 | ||
static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束 | ||
但是作用域不变 |
对比代码1和代码2的效果理解static修饰局部变量的意义。
可以得出这样的一个结论: static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
全局
static 修饰全局变量 | ||
全局变量具有外部链接属性,所以在其他源文件内部依然可以使用(方法要正确) | ||
static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变成了内部链接属性 | ||
这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了 | ||
感觉像是作用域变小了 |
函数
static 修饰函数 | ||
static 修饰函数和static修饰全局变量是一样的 | ||
函数是具有外部链接属性的,但是被static修饰,就变成了内部链接属性 | ||
使得这个函数只能在自己所在的源文件内部使用,不能在其他文件内部使用的 |
二、define 定义常量和宏
define 定义常量
define 定义宏
三、指针
要了解指针,我们先了解一下内存:
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
变量是创建在内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:
#include <stdio.h>
int main()
{
int num = 10;
#//取出num的地址
//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}
那地址如何存储,需要定义指针变量。
int num = 10;
int *p;//p为一个整形指针变量
p = #
&num——指针
我们口头语中说的指针,基本上都是指针变量。
指针其实就是地址。
#include
//%p - 专门用来打印地址的,是16进制的形式表示地址的
int main()
{
int a = 15;//虽然a占有4个字节,但是当我们&a的时候,拿到的是4个字节中第一个字节的地址
//printf("%p\n", &a);
int * pa = &a;//pa存放a的地址的,是一个变量,叫:指针变量,意思是存放指针的变量
*pa = 30;//解引用操作符,*pa 就是a
printf("%d\n", a);
return 0;
}
我们来测试一下指针变量的大小:
博主用的是32位平台所以打印出来的是4。
四、结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。
这里我们只能使用结构体来描述了。
例如:
struct Stu//结构体类型
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
以下是第二种打印方法:
struct S
{
char name[20];
int age;
float score;
};
void print1(struct S t)
{
printf("%s %d %f\n", t.name, t.age, t.score);
}
void print2(struct S* ps)
{
printf("%s %d %f\n", (*ps).name, (*ps).age, (*ps).score);
printf("%s %d %f\n", ps->name, ps->age, ps->score);
}
//结构体变量.成员
//结构指针->成员
int main()
{
struct S s = { "zhangsan", 20, 85.5f };
print1(s);
print2(&s);
return 0;
}
各位老铁,博主的初识C系列到此结束。后续博主会更新更为详细的C语言学习知识。如果博主的文章对你有帮助,请点点关注,点点赞,支持一下博主。感谢你们的关注和赞。