推荐系统——保留用户次数大于n的交互

UEFI开发探索96 – 温度计小游戏

  返回  

【C语言初阶笔记】C语言基础知识概括(超详细)

2021/8/20 22:19:11 浏览:

一键三连加关注哦(不要下次一定哦)

目录

  • 本章目标
  • 什么是C语言
  • 第一个C语言程序
  • 数据类型
  • 变量、常量
  • 数组
  • 字符串+转义字符
  • 选择语句
  • 循环语句
  • 函数
  • 操作符
  • 常见关键字
  • define 定义常量和宏
  • 指针
  • 结构体

本章目标

秃头侠们好呀,今天我们一起初识C语言!

目标:基本了解C语言的基础知识,对C语言有一个大概的认识。每个知识点简单了解就好,之后会细讲。希望经过我们的交流,秃头侠们能对C语言更加自信!

什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSIC,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

第一个C语言程序

#include <stdio.h>
int main()
{
    printf("hello world!\n");
    return 0;
}
//解释:
//main函数是程序的入口
//一个工程中main函数有且仅有一个

(已深入理解hello world)(狗头)

数据类型

C语言中有那些数据类型呢?

char        //字符数据类型
short       //短整型
int         //整形
long        //长整型
long long   //更长的整形
float       //单精度浮点数
double      //双精度浮点数

为什么会出现这么多类型?

答:存在这么多类型,其实是为了更加丰富地表达生活中的各种数值。
比如:

char ch='w'        //字符数据类型
int a=30;          //整形
float b=2.0        //单精度浮点数
double c=3.14      //双精度浮点数

每种类型的大小是多少?

我们可以用sizeof()这个操作符来计算类型的大小

#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char));			//1
    printf("%d\n", sizeof(short));			//2
    printf("%d\n", sizeof(int));			//4
    printf("%d\n", sizeof(long));			//4
    printf("%d\n", sizeof(long long));		//8
    printf("%d\n", sizeof(float));			//4
    printf("%d\n", sizeof(double));			//8
    printf("%d\n", sizeof(long double));	//8
    return 0;
}
/*现在我们知道了每种类型的大小,
类型大小说人话就是能存储数值的范围
你数太大超出范围,自然就越界了*/

变量、常量

生活中的有些值是不变的
(比如:圆周率,性别 (这个不好说哈),身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。

定义变量的方法

int age = 150;
float weight = 45.5f; 
char ch = 'w';

变量的分类

  1. 全局变量
  2. 局部变量
#include <stdio.h>
int global = 2022;			//全局变量
int main()
{
    int local = 2021;		//局部变量
   
    //下面定义的global会不会有问题?
    int global = 2020;//局部变量
    printf("global = %d\n", global);
    return 0;
}

答案:输出结果为global=2020
下面定义的global没有问题,当全局变量和局部变量冲突时,优先使用局部变量!(尽量不要冲突)

变量的使用

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &a, &b);
    sum = a + b;
    printf("sum = %d\n", sum);
    return 0;
}

我们定义了3个变量,分别为int num1 = 0; int num2 = 0; int sum = 0;并且都初始化为0。
我们介绍一下printf和scanf
scanf是输入函数,就此题,我们要键入两个数值(用空格隔开),这两个数值则被赋值给了ab&是取地址操作符,记住格式就够,%d是打印整形

除了%d,还有
%c-打印单个字符
%f-打印浮点数
%p-以地址形式打印
%x-打印16进制数字
%s-打印字符串

sum=a+ba+b的结果赋值给了sum(注意=是赋值操作符==才是等于)
printf是输出函数,就此题则是输出sum=结果值输出结果会显示在屏幕上。\n是换行操作符。格式记住就够。

变量的作用域和生命周期
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:

  1. 字面常量
  2. const 修饰的常变量
  3. #define 定义的标识符常量
  4. 枚举常量
#include <stdio.h>
//举例
enum Sex   //enum枚举类型
{
    MALE,
    FEMALE,
    SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    3.14;//字面常量
    1000;//字面常量
    const float pai = 3.14f;   //const 修饰的常量
    pai = 5.14;//ok?
    #define MAX 100        //#define的标识符常量    
    return 0;
}

本来pai是一个变量,可以更改,但是用const修饰之后,pai就变成了常变量,pai就不可以被修改了。
那么3.14f就真的不能被修改了吗?其实可以用指针的方式修改它的地址,解引用来改变其值。这里不细讲。

数组

C语言中的定义为:一组相同类型元素的集合

//数组的定义
int arr[10]={1,2,3,4,5,6,7,8,9,10};
//定义了一个整形数组,最多放10个元素
int arr[]={1,2,3,4,5};
//如果不写几个元素,就是后面元素的个数
char arr[3]={'a','B','\n'};
//这里说明数组不仅可以存储数字,也可以字符
//数组的使用
#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    for(i=0; i<10; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}
//定义数组时int arr[10],而后面使用arr[i]的时候
//是指数组的某个元素,这里就涉及到数组元素的下标,
//数组第一个元素的下标是0,第二个是1以此往后

字符串+转义字符

字符

char arr[]="abcdef";
//这里也可以定义一个字符串用""引起来,结束标志为\0,
//但是隐藏起来不作为字符串内容
#include <stdio.h>
//下面代码,打印结果是什么?
//为什么?(突出'\0'的重要性)
int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't''\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}

结果为
在这里插入图片描述我们可以看到,如果没有\0代码会出错,因为字符串结束标志为\0识别不到\0就不知道何时结束,而是随机往后继续找到\0为止,所以出现乱码。

转义字符
首先我们先看一段代码,如果我们打印此内容,会输出什么结果呢?

#include <stdio.h>
int main()
{
    printf("c:\code\test.c\n");
    return 0;
}

在这里插入图片描述
为何会出现这种结果?
因为\c \t会被转义为'c'字符和Tab(水平制表符)
所以我们需要介绍一下转义字符都有那些

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\“用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a警告字符,蜂鸣
\b退格符
\f换页符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字,如:\130X
\xdddd表示2个十六进制数字, 如: \x30 0
printf("c:\\code\\test.c\n");//这样才对

我们看一道笔试题,问结果是多少(已知strlen是计算字符串长度的一个函数)

#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    printf("%d\n", strlen("c:\test\328\test.c"));
    return 0;
}

结果为:
在这里插入图片描述
6就不用多说,我们主要来说说14怎么来的

   c : \t e s t \32 8 \t  e  s   t  .   c
// 1 2 3  4 5 6  7  8 9  10  11 12  13  14

应该不难理解有\就要注意是否形成转义字符

选择语句

选择语句很好理解,如果怎么,则怎么,否则怎么
在这里插入图片描述

#include <stdio.h>
int main()
{
    int a = 0;
    printf("你要敲代码吗?(选择1 or 0):>");
    scanf("%d", &a);
    if(a == 1)
    {
        prinf("进大公司\n");
    }
    else
    {
        printf("家里蹲\n");
    }
    return 0;
}

循环语句

除了选择语句还有循环语句,你一直坚持循环干一件事直到达到目的。
在这里插入图片描述那么C语言中有那些循环语句

  1. whlie语句
  2. for循环
  3. do…while语句
#include <stdio.h>
int main()
{
    printf("做程序员\n");
    int line = 0;
    while(line<=20000)
    {
        line++;
        printf("继续敲代码\n");
    }
    if(line>20000)
        printf("赢取白富美\n");
    return 0;

函数

函数的作用就是简化代码,只需定义一次,声明后就可重复使用,提高编程效率

#include <stdio.h>
int Add(int x, int y)
{
    int z = x+y;
    return z;
}
int main()
{
    int a = 0;
    int b = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &a, &b);
    sum = Add(a, b);
    printf("sum = %d\n", sum);
    return 0;
}

简单了解就好,之后细讲

操作符

在这里插入图片描述也不做过多解释了解。

常见关键字

C语言中共有32个关键字,在C99中又增加了5个
在这里插入图片描述

define 定义常量和宏

//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;
}

在这里插入图片描述
如图代码和结果就能简单的认识到define的作用

指针

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

在这里插入图片描述

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

在这里插入图片描述
那地址如何存储,需要定义指针变量

int num = 10;
int *p;//p为一个整形指针变量
p = &num;
#include <stdio.h>
int main()
{
    int num = 10;
    int *p = &num;
    *p = 20;
    return 0;
}

在这里插入图片描述
指针大小在32位平台是4个字节,64位平台是8个字节

结构体

结构体是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);

说了这么多终于结束啦(肝儿疼)
如有错 欢迎提出一起交流
后面会持续输出,持续关注周周汪哦

记得关注三连哦

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号