小杨带你玩转C语言(入门篇)初识C语言(下)

Posted 小杨MiManchi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小杨带你玩转C语言(入门篇)初识C语言(下)相关的知识,希望对你有一定的参考价值。

本章目录

每篇前言

1.导语

2.目标

3.知识点

一,常见关键字
      1,认识关键字
      2,关键字分类
          2.1,数据类型关键字
            2.1.1,基本数据类型关键字
            2.1.2,类型修饰关键字
            2.1.3,复杂类型关键字
            2.1.4,存储级别关键字
          2.2,流程控制关键字
            2.2.1,跳转结构
            2.2.2,分支结构
            2.2.3,循环结构
      3,详解关键字之static
          3.1,static修饰局部变量
          3.2,static修饰全局变量
          3.3,static修饰函数
      4,补充关键字之register
二,define定义常量和宏
      1,define定义常量
      2,define定义宏
三,指针
      1,内存
      2,变量地址
      3,指针变量
      4,指针的使用
      5,指针的大小
四,结构体
      1,认识结构体
      2,初始化结构体
      3,输出结构体数据
      4,结构体的综合使用

4.结语


每篇前言

博客主页:小杨爱编程☆

作者简介:2022年博客萌新

作者专栏:小杨带你玩转C语言

作者格言:有志者立长志,无志者常立志!

作者请求:由于博主水平有限,难免会有错误和不准之处,希望各位小伙伴能够在留言区批评斧正。


导语

本篇博客主要向各位小伙伴们继续介绍C语言要学习的后续内容,加深对C语言的了解。希望大家能够通过阅读这篇博客,受益良多!


目标

基本了解C语言的基础知识,对C语言有一个大概的认识
每个知识点就是简单认识,不做详细讲解,后期博客会依次更新。


知识点

一,常见关键字

1,认识关键字

由ANSI标准定义的C语言关键字共32个:

auto double int struct break else long  switch

case enum register typedef char  extern return union

constant float short unsigned continue for signed void

default goto sizeof volatile do if while static

2,关键词分类

根据关键词的作用,可以将关键字分成数据类型关键词和流程类型关键词。

2.1,数据类型关键词
2.1.1,基本数据类型关键字(5个)
关键词关键词的解析
char字符型类型数据
int整型数据类型
float单精度浮点类型
double双精度浮点类型
void声明函数无返回值或者无参数,以及声明无类型指针
2.1.2,类型修饰关键字(4个)
关键字关键字的解析
short修饰int,短整型数据类型,可省略int
long修饰int,长整型数据类型,可省略int
signed修饰有符号的整型数据类型
unsigned修饰无有符号的整型数据类型
2.1.3,复杂类型关键字(5个)
关键字关键字的解析
struct结构体声明
union共用体声明
enum枚举声明
typedef类型重命名
sizeof得到特定数据变量和数据类型的大小
2.1.4,存储级别关键字(6个)
关键字关键字的解析
auto自动变量,通常在栈中使用
static静态变量,修饰局部变量,全局变量,函数
register寄存器变量,建议将变量,函数存储在寄存器中
extern声明外部符号,可理解为引用外部对象
constant定义常量,它限定一个变量不允许被改变,产生静态作用
volatile提醒编译器它后面所定义的变量随时有可能改变

由此返回目录

2.2,流程控制关键字
2.2.1,跳转结构(4个)
关键字关键字的解析
return用于函数体中,返回特定值
continue结束当前循环,开始下一轮循环
break跳出循环和switch语句
goto无条件跳转
2.2.2,分支结构(5个)
关键字关键字的解析
if条件语句
else条件语句的否定分支(与if 连用)
switch选择语句(多重分支语句)
case多重分支语句的选择口(与switch 连用)
default多重分支语句的其他选择口(用于switch语句中)
2.2.3,循环结构(3个)
关键字关键字的解析
forfor循环结构,格式:for(初始变量;循环条件;循环变量的改变)
whilewhile循环结构,格式:while(循环条件)循环体
dodo …while循环结构,格式:do循环体while(循环条件);

由此返回目录

3,详解关键字之static

  • static 修饰局部变量
  • static 修饰全局变量
  • static 修饰函数
3.1,static修饰局部变量

  实例:

#include <stdio.h>
void test()

	int i = 0;
	i++;
	printf("%d ", i);

int main()

	int i = 0;
	for (i = 0; i < 10; i++)
	
		test();
	
	return 0;

  输出结果:


static修饰后:

  实例:

#include <stdio.h>
void test()

	static int i = 0;//static修饰局部变量
	i++;
	printf("%d ", i);

int main()

	int i = 0;
	for (i = 0; i < 10; i++)
	
		test();
	
	return 0;

  输出结果:


  综上分析:static修饰局部变量时,实际改变的是局部变量的存储位置,本来局部变量是应该放在栈区位置的,但是被static修饰后则被放在静态区了,从而导致,局部变量变成了静态的局部变量,出了作用域依然存在,生命周期并未结束,下次进入函数依然存在。


讲到这里,来简单介绍一下简化后的内存:

注:静态区的生命周期和程序的生命周期是一致的,程序结束,静态区的数据生命周期也就结束。


3.2,static修饰全局变量

  实例:

  输出结果:


static修饰全局变量后:

  实例:

  输出结果:


综上分析:一个全局变量具有外部链接属性,但被static修饰后,全局变量的外部链接属性就变成了内部链接属性,只能在所在的源文件内部使用,不能在其他文件内使用。


3.3,static修饰函数

  实例:

  输出结果:


static修饰函数后

  实例:

  输出结果:

  综上分析:一个函数具有外部链接属性,但被static修饰后,全局变量的外部链接属性就变成了内部链接属性,只能在所在的源文件内部使用,不能在其他文件内使用。(与static修饰全局变量相类似) 。


4,补充关键字之register

register:寄存器关键字,建议将变量,函数存储在寄存器中

电脑上的存储设备示意图:

  • 寄存器是集成到CPU上的

  • 早期:CPU数据从内存上读取,CPU处理数据

  • 现在:1.CPU数据处理过快,内存读写速度跟不上,组成CPU数据闲置
    2.CPU数据从寄存器中读取数据,避免CPU数据闲置


由此返回目录

二,define定义常量和宏

1,define定义常量

格式:#define + 标识符 + 常量

  实例:

#include<stdio.h>
//定义标识符常量
#define MAX 100
int main()

	printf("%d", MAX);
	return 0;

  输出结果:


2,define定义宏

  实例:

#include<stdio.h>
//定义宏
#define ADD(x,y) ((x)+(y))
int main()

	int sum = ADD(2, 3);
	printf("%d", sum);
	return 0;

  输出结果:

  分析:


由此返回目录

三,指针

1,内存

1,内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

2,为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节

3,为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址


2,变量地址

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

  取出单元地址:

#include <stdio.h>
int main()

	int num = 10;
	&num;//取出num的地址
	printf("%p\\n", &num);//打印地址,%p是以地址的形式打印
	return 0;

  输出结果:

  注意:这里num是4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)。


3,指针变量

指针变量:用来存放指针(地址)的变量

  示例:

#include <stdio.h>
int main()

 	int num = 66;
 	int *p; //p为int型指针变量
 	p= &num;
 	return 0; 


4,指针的使用

#include <stdio.h>
int main()

	int num = 10;
	int* p = &num;
	*p = 20;
	printf("%d",num);
	return 0;

  输出结果:


5,指针的大小

指针变量的大小取决于地址的大小

32位平台(X86)下地址是32个bit位(即4个字节)

64位平台X64)下地址是64个bit位(即8个字节)

  示例:

#include<stdio.h>
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语言有能力描述复杂类型。

比如描述一名学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里只能使用结构体来描述了。

1,认识结构体

  示例:

struct Stu

    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
;

2,初始化结构体

  示例:

//打印结构体信息
struct Stu s = "张三", 20, "男", "20180101";

3,输出结构体数据

  • .为结构成员访问操作符:结构体变量.结构体成员
  • ->操作符:结构体指针->结构体成员

  示例:

//.为结构成员访问操作符
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);

4,结构体的综合使用

  示例:

//学生
struct Stu

	//成员
	char name[20];
	int age;
	char sex[10];
	char tele[12];
;

void print(struct Stu* ps)

	printf("%s %d %s %s\\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
	//->
	//结构体指针变量->成员名
	printf("%s %d %s %s\\n", ps->name, ps->age, ps->sex, ps->tele);

#include<stdio.h>
int main()

	struct Stu s = "zhangsan", 20, "nan", "15596668862";
	
	//结构体对象.成员名
	printf("%s %d %s %s\\n", s.name, s.age, s.sex, s.tele);
	print(&s);
	return 0;


  输出结果:


结语

各位小伙伴们,(入门篇)初识C语言(下)就将C语言后续要学的内容介绍完了,小伙伴们再看后,应该对C语言有了大致的了解了吧!!!下面我将对这些知识点进行逐一详细讲解,敬请期待!

如果各位小伙伴们感觉写的不错,或者阅读后有些许收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(✌关注,✌点赞,✌评论),多多支持一下!!
小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!

最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!

为了小伙伴能够有更好的阅读体验,在此附上前两篇博客链接:
【小杨带你玩转C语言】(入门篇)初识C语言(上)
【小杨带你玩转C语言】(入门篇)初识C语言(中)

江哥带你玩转C语言 01 - C语言开发环境配置

工欲善其事必先利其器

编写C语言程序用什么工具 ?

  • 记事本(开发效率低)
  • Vim(初学者入门门槛高)
  • VSCode(不喜欢)
  • eclipse(不喜欢)
  • CLion(深爱, 但收费)
  • Xcode(逼格高, 但得有苹果电脑)
  • Qt Creator(开源免费,跨平台安装和运行)

什么是Qt Creator ?

  • Qt Creator 是一款新的轻量级集成开发环境(IDE)。它能够跨平台运行,支持的系统包括 Windows、Linux(32 位及 64 位)以及 Mac OS X
  • Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务
  • 开源免费, 简单易用, 能够满足学习需求

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器编译器调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。


Qt Creator安装

  • 切记囫囵吞枣, 不要纠结里面的东西都是什么含义, 初学者安装成功就是一种成功

  • 下载Qt Creator离线安装包:

    • http://download.qt.io/archive/qt/
  • 以管理身份运行离线安装包

  • 下一步,下一步,下一步,等待ing…

  • 注意安装路径中最好不要出现中文

  • 对于初学者而言全选是最简单的方式(重点!!!)

  • 配置Qt Creator开发环境变量

你的安装路径\\5.11.0\\mingw53_32\\bin
你的安装路径\\Tools\\mingw530_32\\bin

  • 启动安装好的Qt Creator

  • 非全选安装到此为止, 全选安装继续往下看
    • 出现这个错误, 忽略这个错误即可
  • 等待安装完毕之后解决刚才的错误
    • 找到安装目录下的strawberry.msi,双击运行

什么是环境变量?

  • 打开我们添加环境变量的两个目录, 不难发现里面大部分都是.exe的可执行程序
  • 如果我们不配置环境变量, 那么每次我们想要使用这些"可执行程序"都必须"先找到这些应用程序对应的文件夹"才能使用
  • 为了方便我们在电脑上"任何地方"都能够使用这些"可执行程序", 那么我们就必须添加环境变量, 因为Windows执行某个程序的时候, 会先到"环境变量中Path指定的路径中"去查找

为什么要配置系统变量,不配置用户变量

  • 用户变量只针对使用这台计算机指定用户
    • 一个计算机可以设置多个用户, 不同的用户用不同的用户名和密码
    • 当给计算机设置了多个用户的时候,启动计算机的时候就会让你选择哪个用户登录
  • 系统变量针对使用这台计算机的所有用户
    • 也就是说设置了系统变量, 无论哪个用户登录这台计算机都可以使用你配置好的工具

Qt Creator快捷键

作为了解, 后期课程用到会逐一讲解


配套视频地址

以上是关于小杨带你玩转C语言(入门篇)初识C语言(下)的主要内容,如果未能解决你的问题,请参考以下文章

江哥带你玩转C语言 02- 创建第一个C语言程序

江哥带你玩转C语言 01 - C语言开发环境配置

江哥带你玩转C语言 | 07 - C语言流程控制

江哥带你玩转C语言 | 08 - C语言函数

江哥带你玩转C语言 | 10- C语言数组

江哥带你玩转C语言 | 11- C语言排序算法