自学视频《郝斌C语言自学教程》 10:

https://www.bilibili.com/video/BV1os411h77o

C语言大纲

- 1、简介

- 2、基本编译知识

- 3、数据类型

- 4、操作符与表达式

- 5、流程控制

- 6、函数

- 7、数组

- 8、指针

- 9、作用域和存储方式

- 10、扩展数据类型

- 11、字符串处理、进制转换、补码、动态内存分配 链表使用

第一个HelloC程序的讲解

编写源码 - 编译 - 链接【Build】生成? 生成一个后缀名为exe的可执行文件

点击运行,并不是这个IDE在执行,是IDE请求操作系统交给CPU运行这个可执行文件

所有的应用软件,建立在这个操作系统的基础上调用CPU运行的

【98 & ME 版本的Windows系统是个特例,它们允许直接在硬件的基础上跑软件 ,2000之后再不能了】

【越过操作系统直接访问硬件被视为是一个非常危险的操作】

编程的第一步是实现数据的存储,对数据的分类:

总体分为两种  

  基本数据类型,不可再往下细分,是数据存储的最小单位计量

    整数

      整型  int    4byte 字节

      短整型  short int  2byte

      长整型  long int  8byte

    浮点数【不能定量存储,通过浮点实现,本质是一个近似值】

      单精度浮点  float  4byte

      双精度浮点  double  8yte

    字符

      char  单个字符  1byte

      char[ ]  字符串【字符数组】

    布尔【在C种没有定义这种Boolean类型为基本数据类型,true & false 正整数和0表示】

  复合数据类型,对1个以上的基本数据类型进行整合之后的数据类型

  

1个byte 字节占8个二进制位,从0 0 0 0 0 0 0 0到1 1 1 1 1 1 1 1

一共可以表示256个数,也就是28-1 [-128 ~ 127] 这个范围

在C中声明一个int 变量,你可以写double类型的数值赋值int,

编译并不会提示错误,实际的程序编译之后运行,这个值会被强转成int,

多出的小数被精度损失而不得不向下取整,也就是10

- 字符实际上是ASCII码对应的数值,在Java中强转char为int之后可以看到对应的ASCII码值,

但是C中不太确定了,在这里我尝试了一下,结果一样

什么是变量?

是保存数据的一个容器,里面存储的值存放在内存中,程序终止后,值从内存中释放销毁

  程序运行的第一件事:请求操作系统找到内存中空闲的位置

  操作系统将一个空闲的内存空间,分配给这个变量i,这两者产生映射关系【关联关系】

  也就是声明一个变量,这个变量被操作系统引导指向了一个内存中的一个闲置的内存空间

  把值赋值给变量,就是通过变量的这个引导指向,把值存放进了这个内存空间【存储单元】

变量的本质是指向内存中的某一段存储空间

1 程序 【请求】操作系统 寻找可用内存单元

2 操作系统寻找闲置内存单元,分配空间

3 操作系统将那一段内存单元的地址和变量的标识进行绑定【不知道怎么说,就是形成了一个映射关系,一个指向】

4 程序的执行才可以进行

变量为什么要初始化?

初始化,就是必须要赋值

在CLion中并没有报错,只是编写的时候提示了一句,变量没有初始化就被使用了

在视频演示版的C99标准中,输出结果是一个int类型的最小值还是最大值来着

这个CLion我点选C11标准,输出结果始终是一个0,可能已经更改了初始化的规则了

什么叫释放?

释放就是,一个内存单元在某一个程序使用完毕之后,可以被另外的一个程序继续使用

也就是这个内存单元的使用权限解除了,可以被下一个程序使用

a变量指向的空间是空闲的,但不代表此空间是没有值的,内容可能是某一个程序退出之后遗留的值【垃圾值/随机值/不确定值】

【详细深入,操作系统,关键字:系统分配表,对内存的使用状态进行了判断,1即使用中,0即闲置 ,释放即是操作系统对这个状态位进行操作】

1 这个变量正在被操作系统中某一运行的程序使用

2 程序结束了,操作系统收回对内存单元的使用权限,注意!是收回对内存单元的使用权限,其存储的值并没有被清空!!

3 新的程序开始指向,操作系统分配的是内存单元的使用权限,给这个新程序使用!!!

填充值

如果一个变量没有初始化就被使用,那么会编译器为这个变量填充一个缺省值,当然这里的是0

目的是为了提示开发者这个变量没有被初始化

进制: 逢一定数值之后前进一个位数

计算机语言:二进制

人类使用的是:十进制

为了实际需要又补充了八进制和十六进制

C语言的规定:

八进制的数值必须以0作为开头,

十进制的数值不需要修饰,本身即可

十六进制的数值必须0X 或者0x

 汇编语言:

1010B 后缀B 表示Binary  二进制  

1357O 后缀O 表示Octal  八进制

1057D 后缀D 表示Decimal  十进制

3FB9H 后缀H 表示Hex  十六进制

为什么采用二进制作为计算机语言?

因为二进制在硬件上容易实现,开即1,关即0,一切事物就分成两种状态

看进制的诀窍:

推算十进制:

数字的第二位,因为第一位永远不会是进制数,逢N进1就表示了第二位数进制了几次,随后以此类推叠加

例如 71234O 八进制,就表示十进制是 7123 * 8 + 4 , 也就是进制了七千一百二十三次的八再加上4

【郝斌C ST】02的更多相关文章

  1. 郝斌老师的SQL教程

    时隔两年,重拾数据库编程.郝斌老师的sql教程通俗易懂,用作复习简直不能太赞.

  2. 郝斌老师C语言学习笔记(一)

    在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...

  3. [C]郝斌C语言课程大纲及笔记

    本笔记整理于郝斌老师C语言课程,做学习参考之用. 1.[编程笔记]第一章 C语言概述 2.[编程笔记]第二章 C语言预备知识 3.[编程笔记]第三章 运算符与表达式 4.[编程笔记]第四章 流程控制 ...

  4. 郝斌–SQL Server2005学习笔记

    数据库(Database)狭义上是指存储数据的仓库,广义上包含对数据进行存储和管理的软件(DBMS)和数据本身.数据库由表.关系和操作组成. 一.数据库简介 1.为什么需要数据库 数据库简化了对数据的 ...

  5. 郝斌C语言代码

    #include<stdio.h> int main() { ; printf("%#x\n",a); ; } /* output 0xf; */ //(15)10= ...

  6. 郝斌 SqlServer2005 学习笔记

    1.0 什么是数据库 狭义:存储数据的仓库. 广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库. 另外一种说法:数据库是由表.关系.操作组成. 2.0 为什么要学习数据库 几乎所有的应用软 ...

  7. C语言-郝斌笔记-007是否为素数

    是否为素数 # include <stdio.h> bool IsPrime(int val) { int i; ; i<val; ++i) { ) break; } if (i = ...

  8. C语言-郝斌笔记-006排序及查找

    1. int partion(int *a, int low, int high) { int value = a[low]; int t; while (low < high) { while ...

  9. C语言-郝斌笔记-005菲波拉契序列

    菲波拉契序列 /* 菲波拉契序列 1 2 3 5 8 13 21 34 */ # include <stdio.h> int main(void) { int n; int f1, f2, ...

  10. C语言-郝斌笔记-004判断是否为回文数

    判断是否为回文数 # include <stdio.h> int main(void) { int val; //存放待判断的数字 int m; ; printf("请输入您需要 ...

随机推荐

  1. web游览器的标签页仿 ios mac 苹果的墓碑机制 (js代码)

    背景: 本来项目开发系统防挂机功能,在其余游览器中均可以使用.但是呢在苹果的safair游览器中会出现几率失效,最后经过排查发现是苹果的墓碑机制导致.即:此标签页活跃,其他标签页假死.然后就导致防挂机 ...

  2. 第一个java的应用程序

    编写java第一个程序 class HelloWorld { public static void main(String[] args){ System.out.print("Hello ...

  3. lodash已死?radash库方法介绍及源码解析 —— 判断方法篇

    前言 大家好,我是阿瓜.一个励志分享更多技术的前端瓜 ~ 我们已经分享了 radash 库中数组.对象等相关的方法,大家感兴趣的可以前往主页查看阅读: 或许你最近在某个地方听过或者看过 radash ...

  4. Zenlayer如何将万台设备监控从Zabbix迁移到Flashcat

    作为全球首家以超连接为核心的云服务商,Zenlayer 致力于将云计算.内容服务和边缘技术融合,为客户提供全面的解决方案.通过构建可靠的网络架构和高效的数据传输,Zenlayer 帮助客户实现更快速. ...

  5. 关于编译告警 C4819 的完整解决方案 - The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.

    引言 今天迁移开发环境的时候遇到一个问题,同样的操作系统和 Visual Studio 版本,原始开发环境一切正常,但是迁移后 VS 出现了 C4819 告警,上网查了中文的一些博客,大部分涵盖几种解 ...

  6. 使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数

    大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属.到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了.而在去年gpt-4尚未发布函数调用时,智能 ...

  7. python webdriver.remote远程创建火狐浏览器会话报错,Unable to create new service: GeckoDriverService

    问题: 使用selenium.webdriver.remote,远程指定地址的浏览器,并创建会话对象:创建火狐浏览器会话时,报错,错误信息如下: Message: Unable to create n ...

  8. MYSQL8-快速生成表结构(用于生成文档)

    各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...

  9. 基于GNU ARM Eclipse的集成环境搭建

    背景 老师送给我的STM32的板子不小心给我坏了,现在疫情还没过去,为了复习巩固stm32有关的移植,只能先玩玩仿真了. 我们在这一讲主要以搭建环境为主. host平台 :Ubuntu 16.04 G ...

  10. Java 把多个音频拼接成一个

    在Java中,将多个音频文件拼接成一个通常需要使用一些专门的音频处理库,因为Java标准库并不直接支持音频文件的合并.一个常用的库是JAVE2(Java Audio Video Encoder)或JL ...