<>目录

* 常见关键字
1.1 关键字 typedef
1.2关键字static
* #define 定义常量和宏
* 指针
3.1内存
3.2指针变量的大小
* 结构体
<>1.常见关键字

关键字–C语言本身内置的,关键字不是自己创建出来的,也不能创建出来的。C 语言一共有32个关键字,根据功能不同,可以分以下四类:

* 数据类型关键字(12个)
(1)char: 声明字符型变量或函数(1字节)
(2)short: 声明短整型变量和函数(2字节)
(3)int: 声明整型变量或函数(2/4字节)
(4)long: 声明长整型变量或函数(4/8字节)
(5)float: 声明浮点型变量或函数(4字节)
(6)double: 声明双精度变量或函数(8字节)
(7)signed: 声明有符号类型变量或函数
(8)unsigned: 声明无符号类型变量或函数
(9)void: 声明函数无返回值或无参数,声明无类型指针
(10)enum: 声明枚举类型
(11)struct: 声明结构体变量
(12)union: 声明共用体(联合)数据类型
* 控制语句关键字(12个)
循环语句
(1)for: 一种循环语句
(2)do: 循环语句的循环体
(3)while : 循环语句的循环条件
(4)break: 跳出当前循环
(5)continue: 结束当前循环,开始下一轮循环
条件语句
(6)if: 条件语句
(7)else: 条件语句否定分支(与 if 连用)
(8)goto: 无条件跳转语句
开关语句
(9)switch : 用于开关语句
(10)case: 开关语句分支
(11)default:开关语句中的“其他”分支
返回语句
(12)return:子程序返回语句(可以带参数,也可不带参数)
* 存储类型关键字(4个)
(1)auto: 声明自动变量
(2)extern: 声明全局变量
(3)register: 声明寄存器变量
(4)static:声明静态变量
* 其他功能关键字 (4个)
(1)const: 声明只读变量
(2)sizeof: 计算存储空间
(3)typedef: 给数据类型取别名
(4)volatile: 说明变量在程序执行中可被隐含地改变
其中auto(自动变量)是常常被忽略的关键字
(auto) int a=10;//自动变量,auto被忽略
<>1.1关键字typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。typedef只针对类型。
#include<stdio.h> //将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名 typedef
unsigned int uint_32; int main() { //观察num1和num2,这两个变量的类型是一样的 unsigned int num1
= 0; uint_32 num2 = 0; printf("%d %d",num1,num2); return 0; }

<>1.2关键字static

在C语言中:static是用来修饰变量和函数的

* 修饰局部变量-称为静态局部变量
* 修饰全局变量-称为静态全局变量
* 修饰函数-称为静态函数
<>static修饰局部变量

a. 函数中局部变量:
声明周期延长:该变量不随函数结束而结束
初始化:只在第一次调用该函数时进行初始化
记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值
存储位置:不会存储在栈区,放在数据段
例如:无static修饰的局部变量
```bash ```bash ```c #include<stdio.h> void test() { int a=1; a++; printf("%d"
,a); } int main() { int i=0; while(i<10) { test(); i++; } return 0; }

有static修饰的局部变量:
#include<stdio.h> void test() { static int a=1; a++; printf("%d",a); } int main
() { int i=0; while(i<10) { test(); i++; } return 0; }


可以看出没有static修饰局部变量a时候,输出结果是10个2,有static修饰局部变量a的时候,输出结果是2到11。这是因为static修饰局部变量时候,局部变量出来作用域,不被销毁的,本质上static修饰局部变量,是通过改变变量的储存位置由栈区变到静态区,也使该变量的生命周期变长,使其生命周期和程序生命周期一样。

<>static修饰全局变量

全局变量是具有外部链接属性的(编译+链接=可执行程序)
static修饰全局变量时候,全局变量的外部链接属性变成了内部链接属性。其他源文件(.c)就不能再使用这个全局变量。(作用域变小了)
例如:没有static修饰全局变量时候

有static修饰全局变量时候

<>static修饰函数

函数也具有外部链接属性,被static修饰时候,外部链接属性变为内部链接属性,其他源文件(.c)不能再使用该函数。
例如,没有static修饰函数时候:

有static修饰函数时候:

<>2.define定义常量和宏
//define定义标识符常量 #define MAX 1000 //define定义宏 #define ADD(x, y) ((x)+(y))
//其中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; }
以后详细讲解。

<>3.指针

指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。

<>3.1内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。例如:

就比如一栋居民楼中每一个房间都有一个编号,可以通过这些编号快速查询到相应的房间。

上图中0x00AFFDF0是储存a的地址,也是向内存申请4个字节中的首地址,其中&是取地址操作符
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。取出变量地址如下:
#include <stdio.h> int main() { int num = 10; #//取出num的地址
//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址) printf("%p\n", &num);
//打印地址,%p是以地址的形式打印 return 0; }

此时0053FD9C是num的地址。
内存单元:编号–》地址–》地址也被称为指针
那地址如何存储,需要定义指针变量。存放指针(地址)的变量就是指针变量
int num = 10; int *p;//p为一个整形指针变量 p = #
*说明p是指针变量,int说明p(指针变量)指向的对象是int类型的

*p是解引用操作符,就是通过p中存放的地址,找到p所指的对象,其中 *p是p的指向对象。
#include <stdio.h> int main() { int num = 10; int *p = # *p = 20; return 0;
}
<>指针变量的大小
#include <stdio.h> //指针变量的大小取决于地址的大小 //32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节) int main() { printf("%d\n", sizeof(char *)); printf(
"%d\n", sizeof(short *)); printf("%d\n", sizeof(int *)); printf("%d\n", sizeof(
double *)); return 0; }

这是32位机器的地址下的指针大小。

这是在64位位机器的地址下的指针大小。以后详细讲解

<>结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字+年龄+性别+学号这几项信息。
这里只能使用结构体来描述了。例如:
struct Stu {//成员 char name[20];//名字 int age; //年龄 char sex[5]; //性别 char id[15]
;//学号 }; //打印结构体信息 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);//结构体指针变量-->成员名

以后详细讲解。

<>总结

今天学到了很多知识点,特别是结构体是C语言中很重要的知识点,指针又是C语言中的难点,这些知识点将在以后在小沐文章中揭开神秘面纱。如果以上有什么不足之处,还望指正,谢谢。

技术
©2019-2020 Toolsou All rights reserved,
程序员的520,送给女友的几行漂亮的代码(python版)基于stm32控制四轮小车电机驱动(一)linux查看磁盘空间命令实验四 自动化测试工具-软件测试axios拦截器封装与使用C语言——qsort函数opencv-python傅里叶变换以及逆变换在算法研究过程中如何进行算法创新nc的安装和简单操作C语言做一个简易的登陆验证(功能)界面