zoukankan      html  css  js  c++  java
  • 【郝斌C ST】02

    自学视频《郝斌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

     

  • 相关阅读:
    一次Oracle数据迁移
    mysql Error Handling and Raising in Stored Procedures
    expdp ORA-39213
    RHEL 6.4 64bit kettle5.01导入xlsx格式的excel时报错
    Oracle表空间传输测试
    oracle expdp 无法导出SYS下特定TABLE
    Oracle wrap 测试的一些细节问题
    论文-CondenseNet: An Efficient DenseNet using Learned Group Convolutions
    SystemVerilog-断言
    推挽输出和开漏输出
  • 原文地址:https://www.cnblogs.com/mindzone/p/12747701.html
Copyright © 2011-2022 走看看