C语言总体内容概述

  • 1.C语言的是什么?
  • 2.第一个C语言程序:
  • 3、数据类型:
    • 3.1整形:
    • 3.2浮点型:
    • 3.3字符串如何定义
    • 3.4各种数据类型的大小
  • 4、常量和变量
    • 4.1常量:
      • (1)常量分类:
      • (2)定义常量:
    • 4.2 变量:
      • 1变量类型(常用的)
      • 2变量的使用:
      • 4.3 变量作用域,生命周期
        • (1)作用域;(也就是变量的作用范围)
        • (2)生命周期:可以认为是变量存活的(有意义的)时间范围:
  • 5、字符常量+ 字符串+ 转义字符
    • 5.1字符常量(5种)
    • 5.2 字符串
      • (1)字符串定义:
      • (2)一串字符串的结束标志是' \0 ',但不算做字符串内容
      • (3)计算字符串长度:
    • 5.3 转义字符
      • 引入:
  • 6、 常用语句(选择分支语句和循环语句)
    • (1)选择语句(分支语句)
      • 选择语句如何理解理解:
      • 三种选择语句
    • (2) 循环语句
      • 如何理解循环语句
  • 6、 函数
    • (1) 函数的含义:
    • (2) 函数的构成:
  • 7 数组:
    • 7.1 数组应用于:
    • 7.2 数组定义:
    • 7.3 数组的访问:
    • 7.4数组的使用:
  • 8 操作符(运算符)
    • 8.1常用操作符
    • 8.2 不常用操作符
  • 9 C语言常见关键字
    • 9.1关键字注意事项
    • 9.2 不太常用的关键字
  • 10.define定义常量和宏
  • 11. 指针
    • 11.1 内存:
      • (1)内存含义:
      • (2)内存如何编号:
    • 11.2 指针变量:
      • (1)指针变量作用:
      • (2)指针变量的使用:
      • (3)*指针变量(解引用):
      • (4)指针变量大小:
  • 12. 结构体
    • 12.1结构体作用:
    • 12.2结构体构成:
    • 12.3结构体初始化
  • 13.其他:
    • 13.1数据存放的形式:
    • 13.2 注释
      • (1)注释作用:
      • (2)注释方法:

1.C语言的是什么?

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

2.第一个C语言程序:

#include <stdio.h>//引用头文件,使我们可以使用C语言库本身提供函数,即库函数(被封包好的函数,具体实现无法看到,可以从msdn查内部原理)
int main()//main()是主函数
{printf("hello world\n");//printf()是输出函数,转义字符'\n'是换行的意思return 0;//使程序退出,0的意思是程序正常退出
}
//解释:
//main函数是程序的入口
//一个工程中main函数有且仅有一个

程序执行结果:

3、数据类型:

3.1整形:

char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形

3.2浮点型:

float //单精度浮点数
double //双精度浮点数

3.3字符串如何定义

C语言有没有字符串类型:
答案**:C语言本身没有字符串类型,在c语言程序中使用的字符串实际是字符数组(由多个字符组成)**
字符串的两种定义方式:

#include<stdio.h>
int main()
{char string1[] = "abc";char string2[] = { 'a','b','c' };return 0;
}

两种定义方式的区别:

3.4各种数据类型的大小

  • 为什么要有这么多种数据类型?

一方面是能够存储更加多样的数据,便于进行数据处理

另一方面的原因就是为了能够更好节约我们的内存空间

  • 每种数据类型的大小是多少?
    利用sizeof库函数来计算,结果单位为字节
#include <stdio.h>
int main()
{printf("%d\n", sizeof(char));printf("%d\n", sizeof(short));printf("%d\n", sizeof(int));printf("%d\n", sizeof(long));printf("%d\n", sizeof(long long));printf("%d\n", sizeof(float));printf("%d\n", sizeof(double));printf("%d\n", sizeof(long double));return 0;
}

运行结果:

4、常量和变量

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

4.1常量:

(1)常量分类:

  1. 字面常量
  2. const修饰的常变量:同时具有常量和变量的性质,本质上是变量但值不可被修改,因此叫常变量
  3. #define定义的标识符常量:具有全局性质
  4. 枚举常量

(2)定义常量:

  • 整形常量(整数):int age =18;

  • 浮点型常量(带有小数点的数):float weight=62.5;

  • 字符常量(包含普通字符,特殊字符,数字):char ch=‘z’;

  • 字符串常量:char string[]=" a,b,c";(本质上是定义字符数组来存放多个字符)

4.2 变量:

1变量类型(常用的)

(1)整形:short , int ,long int ,long long int,char
(2)浮点型:float,double

2变量的使用:

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

简述printf函数和scanf函数:

printf()函数:输出函数。在双引号内的将进行输出,而%就是控制变量的输出格式,即起到了格式控制的作用,比如%d就是将变量以整型的形式进行打印输出到屏幕上,%c则是以字符型的形式进行打印输出!在逗号后面的就是我们想要输出的变量,在这个地方需要大家进行注意,%格式控制一定要与后面的变量进行意义对应!

scanf()函数:输入函数。跟上面的一样,%也是进行格式控制,不过此处与printf的区别就是此处是进行输入的格式控制,比如%d,就是将我们的输入的内容以整型的形式存储到我们的变量中,此处与前面也一样,都要与逗号后面的变量进行严格的对应,但此处仍然有一个需要大家进行注意的点,比如我们在输入时,我们在%d %d两个%d中间有一个空格进行分隔,那么我们在通过键盘进行输入的时候也要在两个变量中间进行分隔,即我们的输入要与双引号之间的内容进行严格第对应!

4.3 变量作用域,生命周期

(1)作用域;(也就是变量的作用范围)

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

局部变量的作用域为该局部变量所在的局部范围
全局变量作用域为整个工程,可以是多个源文件(.c文件)中使用。

注:一个.c文件中定义的全局变量在另.c文件中使用时需要使用 extern进行一次声明

(2)生命周期:可以认为是变量存活的(有意义的)时间范围:

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

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期(整个.c文件)。

5、字符常量+ 字符串+ 转义字符

5.1字符常量(5种)

字符包含

(1)普通字符类型:字母a,b,c…

(2)特殊字符类型:# $ % ^ & * (

(3)数字类型:1 2 3 4

注:字符型数字和常量型数字不完全相同

(4)不可见字符:转义字符\n ,\t, \r

5.2 字符串

(1)字符串定义:

由双引号“”引起来的一串字符(以上4种)

(2)一串字符串的结束标志是’ \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;
}

打印结果:

我们可以看到,我们在输出arr2时出现了乱码形式,为什么会出现这种情况呢?

因为在arr2中并不包含字符串的结束标志即’\0’,所以会出现上面的乱码!

注意:
1、在我们用printf()函数以字符串形式进行输出时,只有遇到’\0’时才会停止输出!
2、我们在使用上面arr1这种形式进行定义字符串时,在""里面的字符串中就已经自动包含了字符串的结束标志即’\0’!
3、当我们在使用{}字符串的定义的 方式时我们一定要记得加上字符串的结束标志,虽然我们有时候用不到,但这却是我们必须要做的,这也是一个合格的程序员必备的素养,当然,有的时候确实并不需要加上,在新手期间,

(3)计算字符串长度:

使用库函数 strlen(字符串),注意要引用头文件#include<string.h>

一道笔试题计算字符串长度

//程序输出什么?
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef")); >  // \62被解析成一个转义字符printf("%d\n", strlen("c:\test\628\test.c"));return 0;
}

输出结果:

strlen()函数,这个函数的作用是求字符串的长度,当遇到字符串的结束标志时将停止,但是需要注意一点,就是字符串的结束标志’\0’本身并不作为字符串长度的一部分(’0不属于字符串的内容)。
上面这一段代码,strlen()括号中的字符串内容为abcdef还有字符串的结束标志’\0’,但是由于字符串的结束标志并不作为字符串长度的一部分,所以字符串的长度为6。
下一段代码,下面有转义字符,了解过转义字符后,此处需要给大家明确一个概念,***转义字符被我们看作成是一个字符,即使它的形式是\后面跟了1个或者多个字符,但strlen()函数只把它看成是一个字符。***所以为什么我们的编译器给出上面的结果也就不难理解了,在上面的结果也就不难理解了,\t是一个转义字符,\62也是一个转义字符,为什么8不跟着一块呢?因为\后面跟的是八进制,即只包含0到7的数字,不能包含8,所以8不被包含在内!后面还有已给\t也是一个转义字符!最终得出14的结果!

5.3 转义字符

引入:

假如我们要在屏幕上打印一个目录: c:\code\test.c
我们该如何写代码

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

实际打印结果:

此处就涉及到了转义字符;
转义字符含义就是转变了原来普通字符的含义:比如上面用到了\t,\n
下表是一些C语言中的转义字符:

基础阶段常用的有:

  • \n:换行

  • \t:水平制表符,相当于Tab键

6、 常用语句(选择分支语句和循环语句)

(1)选择语句(分支语句)

选择语句如何理解理解:

选择是什么?
如果你好好学习,校招时拿一个好offer,走上人生巅峰,你女朋友继续陪在你的身边!
如果你不学习,毕业等于失业,你女朋友跟你分手了!
这就是选择!

#include <stdio.h>
int main()
{int code = 0;printf("你会去敲代码吗?(选择1 or 0):");scanf("%d", &coding);if (coding == 1){ printf("坚持,你会有好offer,女朋友陪在你身边\n");}else{printf("毕业即失业,女朋友跟你分手\n");}return 0;
}

运行结果:
选择1:
选择0:

三种选择语句

  • (1)if
  • (2)if else
  • (3)switch分支

(2) 循环语句

如何理解循环语句


C语言如何实现循环?

  1. while语句
  2. do while 语句
  3. for语句

while语句样例:

#include <stdio.h>
int main()
{int line = 0;while (line <= 20000){line++;printf("我要继续努力敲代码\n");}if (line > 20000)printf("好offer\n");return 0;
}

6、 函数

(1) 函数的含义:

执行一定任务后得到一个结果返回值(类比数学中函数概念)

(2) 函数的构成:

1 调用函数返回值的类型 2 函数名 3(形式参数)

{

​ 函数内容(作用)

}

7 数组:

7.1 数组应用于:

存放多个(一组)相同数据类型的元素时候使用

7.2 数组定义:

数组类型 数组名 [ ]={初始化}

不完全初始化时候自动补0

7.3 数组的访问:

用下标访问,下标从0开始,最多存放数和方括号内数字相同

7.4数组的使用:

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

输出结果:注意循环从0-10

8 操作符(运算符)

8.1常用操作符

1算数操作符: + - * / %

2关系操作符: > >= < <= == !==

3赋值操作符:=, =+, -=, /=,等

4逻辑操作符: && (且) ||(或)

5条件操作符(三目操作符):表达式1? 表达式2 : 表达式3 ((表达式1成立执行表达式2,否则执行3)

6 单目操作符:只有一个操作数

8.2 不常用操作符

7移位操作符号(了解):>>(右移操作符) <<(左移操作符)

8位操作符:(1)&:按位与 (2) |:按位或 (3)^ :按位异或

9逗号操作符

10下标引用操作符:[ ]

11函数调用操作符:()比如printf/scanf后面的()

9 C语言常见关键字

  • auto
  • break
  • case
  • char
  • const
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • signed
  • sizeof
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • volatile
  • while

9.1关键字注意事项

(1)由C语言本身提供,不可修改自创
(2)关键字不能作为变量名

9.2 不太常用的关键字

auto:局部变量都应该有被修饰,被省略了

enum:枚举

extern:声明外部定义

goto:

register: 寄存器关键字,修饰的变量建议放在寄存器中

signed: 有符号的(分正负)

unsigned:无符号的

static:静态的,C语言种用来修饰变量和函数

(1)修饰局部变量:static修饰局部变量改变了变量的生命周期 让静态局部变量出了局部范围依然存在,到程序结束,生命周期才结束。(本质是改变了变量的存储类型)

(2)修饰全局变量:被static修饰的全局变量只能在所在源文件内部使用,其他源文件不能使用(即使声明)

(3)修饰函数:类似修饰全局变量,被static修饰的函数不再能被另一.c源文件使用(即使声明)//改变了连接属性,由外部连接属性变为内部连接属性

struct:结构体

typedef: 类型重定义(自定义类型名字),写在主函数之前
typedef 顾名思义是类型定义,这里应该理解为类型重命名。

typedef unsigned int uint_32;
int main()
{//观察num1和num2,这两个变量的类型是一样的(把unsigned int重命名了为unit_32)unsigned int num1 = 0;uint_32 num2 = 0;return 0;
}

union:联合体(共用体)

void:空

volatile:暂时没用到

注:define和 include是预处理指令,不是关键字

10.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;
}

输出结果:

11. 指针

11.1 内存:

(1)内存含义:

  • 内存是电脑种重要的存储器,计算机中程序的运行都是在内存中进行的 电脑内存一般是8G/16G,用于临时储存CPU运算数据,
  • 因此为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节(byte)。
  • 为了能够有效的访问到内存中的每个内存单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

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

那么如何找出(取出)变量的地址呢?

#include <stdio.h>
int main()
{int num = 10;&num;//取出num的地址//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小地址)printf("%p\n", &num);//打印地址,%p是以地址的形式打印return 0;
}


地址的存储:变量的地址存储需要指针变量

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

(2)内存如何编号:

32位/64位机器:32根/64根地址线(物理意义上的线)

通电时候–正电为1,负电为0

电信号转化为0和1的二进制序列的数字信号

因此32位机器产生的二进制序列可能性:一共是2^32个(都可以作为地址编号)

11.2 指针变量:

(1)指针变量作用:

用于存放变量的地址(一个编号)

(2)指针变量的使用:

#include <stdio.h>
int main()
{int num = 10;int* p = &num;//指针变量p存放变量num的地址*p = 20;//对指针变量p解引用找到numreturn 0;
}


注意:指针变量p存放的变量第一字节的地址
由整形指针变量可以推广

(3)*指针变量(解引用):

通过指针变量存放的地址找到某变量

(4)指针变量大小:

由机器位数决定,与数据类型无关

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节):x86
//64位平台下地址是64个bit位(即8个字节): x64
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位机器上是4字节,在64位机器上是8字节

12. 结构体

12.1结构体作用:

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。 比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。 这时候只能使用结构体来描述。

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

12.2结构体构成:

struct 结构体名
{
数据1
数据2

}

12.3结构体初始化

//打印结构体信息
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);

13.其他:

13.1数据存放的形式:

栈区:局部变量,函数参数(临时的)

堆区:动态的内存分配

静态区:全局变量,static修饰的静态变量

13.2 注释

(1)注释作用:

解释复杂代码,方便阅读

(2)注释方法:

注释有两种风格:

C语言风格的注释 /xxxxxx/ 缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行

尊重原创,本文参照链接巨佬的文章及个人搜集整合
http://t.csdn.cn/4qlie

【C语言】总体脉络-知识框架相关推荐

  1. 0基础C保姆自学 第二节——初步认识C语言的全部知识框架

    大家好,我是@jxwd(健祥无敌~~~~哈哈) 写在前面 各位小伙伴还在为C语言的学习而苦恼嘛? 还在为没有知识体系而烦心嘛? 别急.因为~~~~ 接下来的两个多月,我会持续推出C语言的有关知识内容. ...

  2. 《教育学原理》知识框架整理

    <教育学原理>知识框架整理 一.教育学概述 (一)教育学的概念:教育学是研究教育现象和教育问题,揭示教育规律的科学. (二)教育学的研究对象:教育学以教育现象.教育问题为其研究对象,通过对 ...

  3. 【信息系统项目管理师】高项知识框架--考点大汇总

    [信息系统项目管理师]高项知识框架–考点大汇总 章节 管理领域 过程说明 输入输出 工具技术 项目文档 流程步骤 概念分类 控制审计 知识点汇总 第二章 管理基础 - - - - - 11 - 11 ...

  4. 浅析 Go IO 的知识框架

    Go 和 IO 的不解之缘? Go 是一种高性能的编译性语言,天然支持高并发,语言级别封装协程,号称可以支持成千上万,十万,甚至百万的协程并发.这个量级远不是线程可比的. 前置小知识点:并行和并发的区 ...

  5. 人工智能(2)---从0开始搭建产品经理的AI知识框架:计算机视觉

    从0开始搭建产品经理的AI知识框架:计算机视觉 从PM的视角出发,本篇内容我会围绕这4块内容来跟大家交流: 什么是计算机视觉 现阶段有哪些应用技术 落地中会遇到哪些问题和挑战 产品方向一些思考 1.什 ...

  6. 国际市场营销知识框架图_打包送!120页中新史笔记+21张框架图+表格!你需要的中新史资料都在这!...

    中新史大概.也许.应该是现阶段大家最想快速搞定的科目了. 这段时间,「中新史知识清单」专栏在更新的过程中,就有不少小岛民前来问我们:会不会出整合版的PDF呀?隔着屏幕仿佛都可以看到大家眉头扭成小麻花的 ...

  7. 组件分享之后端组件——基于Golang语言的游戏服务器框架leaf

    组件分享之后端组件--基于Golang语言的游戏服务器框架leaf 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类 ...

  8. 计算机知识怎么做框架,计算机基础知识框架.ppt

    <计算机基础知识框架.ppt>由会员分享,可在线阅读,更多相关<计算机基础知识框架.ppt(25页珍藏版)>请在装配图网上搜索. 1.计算机基础知识讲座,硬件组成 软件系统 网 ...

  9. 不会搭建Android知识框架,活该你成不了技术大牛!

    正文共:3327字 建议只字不差的阅读(一篇文章都没耐心读完,你还能干啥) 接下来我会尽最大的篇幅把我的方法论给大家讲清楚,每一个步骤会告诉你为什么这么做以及到底该如何做,也就是说我不仅告诉你这个道理 ...

最新文章

  1. R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点
  2. 算法-------求众数
  3. P1314 聪明的质监员(前缀和+二分)
  4. Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon
  5. 软件设计开发笔记1:基于状态机的程序设计
  6. Java 多线程 —— wait 与 notify
  7. Enterprise Solution 应用程序开发框架培训
  8. 谷歌浏览器修复工具_奇安信代码卫士协助谷歌修复漏洞 获官方致谢
  9. jdbc mysql url写法_MySQL第04篇:JDBC
  10. ubuntu终端快速启动应用程序
  11. datagridview表中插入一行_excel表格技巧:Ctrl+T在超级表中的妙用
  12. Java常用Linux命令集合
  13. 雷达初学者必读 | 毫米波雷达信号处理入门教程
  14. 微服务学习第四十七节 Nacos一致性协议:Distro协议
  15. ReactNative学习路线
  16. 工作网络计算机显示不完全,win10网络共享,计算机显示不全?
  17. 【数据结构基础_有[*pHead]和[*pEnd]的单向链表_(C语言实现)】
  18. 基于javaweb+jsp的晚会抽奖系统(java+Jdbc+Servlet+Ajax+mysql)
  19. ac86u原厂固件去广告_释放更多功能,华硕 AC86U 刷官改固件教程
  20. oraclenbsp;level关键字

热门文章

  1. 【UEditor】百度UE富文本自定义按钮添加文本
  2. 综合布线系统桥架型式及品种选择
  3. 从文化地理看三国演义
  4. 赛码网_在线编程_上台阶
  5. 用python编写缠论中枢_【缠论】python 实现
  6. DownloadManager下载管理
  7. finereport自学教程_办公物语丨Finereport零基础入门教程,你不可缺少的报表神器...
  8. 编译Floodlight报错:Compile failed; see the compiler error output for det([javac] javac: 无效的目标发行版: 1.8)
  9. pycharm已正确安装OpenCV但是报错没有CV2模块
  10. Vue:获取当前定位城市名