郝斌C笔记

进制

  • c里面015是八进制 是13 0x是十六进制

汇编里面 25o是八进制 25x 十六进制

  • 输出格式%d %o %x

如47 %x输出2f
%X 输出2F
%#x输出0x2f
%#X输出0X2F
所以输出十六进制用%#X

数据类型

变量的本质是内存中的一段存储空间
变量一定要初始化
int i=3,j=5; 同时初始化是可以的

整数是以补码的形式转化为二进制代码存储在计算机中的
实数是IEEE754标准转化为二进制代码存储在计算机中的
字符的本质实际与整数的存储方式相同

取余%的运算对象必须是整数
逻辑运算符&& 第一个为假 后面就不执行了
|| 第一个为真,后面不执行
C里面小数默认double型,如要float型,写成66.6f

流程控制

if 或 else控制的范围只有一句
if…else… 是一个语句
if…else if… else 中添加一句其他会出错,中断前面的,else if 不能单独开始
else 与距离最近的if 对应,不加括号的话

  • 90<score<100会永真,前一段是0或1,必定小于100

强制转换类型 (float)(5) 最好都加上括号
循环更新的变量不能用浮点型
1.0*sum 1.0默认double类型 输入必须用%lf 输出可以用%f

  • 分号和括号 分隔语句 在里面的都是一个语句
  • 自增i++速度更快比i = i+1
  • 逗号表达式 从左到右执行

数组和指针

  • int a[5] = {0}; 清零
  • int * p 存放int变量地址的类型

指针是地址,地址是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
有时把指针变量简称为指针

  • 指针定义时就要初始化 不然容易错 而且赋值必须为地址
  • 指针传递 传递的是地址 间接寻址
  • 指针交换 只是 间接地址的交换 ,不影响原地址的值。要改变原地址才行即p和q的交换
  • 要修改main的多个值,在子函数用指针修改
  • 一维数组名是个指针常量
    • p[i] 永远等价于 *(p+i)
  • 传递数组要传输首地址(指针常量)和长度
  • 指针变量只能减(同一连续空间),其他基本运算不行
  • 指针变量(存放地址)都是4字节,与地址线相关。
  • 数组不能手动释放,且长度必须是常量

动态分配:添加malloc.h(memory allocate) 返回首地址 用(int *)表示有四个字节(数据单位)
p指针存放分配的内存的首地址,即p指针在另一个地方 间接寻址 又是4个字节 但是两者分配方式不一样 是一个动态 一个静态(p本身是静态分配的)
free ( p ) 释放p指向的内存(收回使用的权限)而p本身是静态分配的 不能手动释放

扫描二维码关注公众号,回复: 12661939 查看本文章
  • 静态分配的不能跨函数使用
    • 跨函数改变指针内容 其他函数内要动态申请该指针内存 系统不会自动释放(系统释放,即出栈)
  • 指针传给函数,是指针的拷贝,做实质上的变动
  • 变量的地址不能变,只有内容才能改变。改变指针p,是改变p的内容,即指向
  • realloc() 动态增加减小
  • NULL表示的是内存单元编号为0的地址,不可读和不可写

结构体和其它类型

  • 结构体先定义结构 再定义变量 不要同时进行

    struct student st = {
          
          1,66,'f'}
    
  • 传结构体给函数 用结构体指针,消耗内存小,速度快

  • 结构体可以相互赋值

  • 枚举 和结构一样 先定义类型 限制用户的输入范围 代码更安全

  • 十进制与二进制 中间可通过十六进制转换

  • 负数的补码 可以先求其正数二进制 再全部取反,末尾加1

    • 求负数二进制的十进制:将全部位取反,末尾+1,得其绝对值
  • 十六进制按补码存放

  • 若溢出,按补码计算

  • 按位与1 保留某几位

    • 按位或0 保留某几位
  • 左移<<1位 乘2 更快

    • 右移>> 正数补0 负数补1 除2
    • 前提是数据不能丢失

字符串

  • char str[] 不能直接赋字符串 要用strcpy() 【在string.h】

  • “A” 表示 ‘A’ 和 ‘\0’ 的组合

  • 输入字符时,前面有输入,需考虑空白符的问题

  • 系统读入数据都是字符流,scanf以规定的格式再写入目标地址,会截取合法的,剩下的留在输入流中

    • scanf最好不要有非控制符,如\n 这样输入要输入\n
    • 用while((ch=getchar())!=’\n’) continue 清空输入流,保证下次输入正确

重要

  • 构成c语言的基本单位是函数

  • 什么叫分配内存,什么叫释放内存

    1. 操作系统把某一块内存空间的使用权利分配给程序叫分配内存
    2. 操作系统把分配给该程序的内存空间的使用权利收回叫释放内存
    3. 释放内存不是把该内存的内容清零
  • 系统如何执行int i = 5 这个语句

    1. 软件请求操作系统为i分配存储空间

    2. 操作系统会在内存中寻找一块空闲的区域,把该区域当做i来使用

    3. 软件会把i和这一块空闲区域关联起来,今后对字母i操作就是对这块空闲的区域操作

    4. 把5存储到字母i所关联的内存区域中

      所谓内存区域也就是内存的一块存储单元

  • 函数的优点是

    1. 避免重复性操作
    2. 有利于程序的模块化
  • 什么是指针,什么是地址,什么是指针变量

    1. 地址就是内存单元的编号,指针就是地址
    2. 指针变量是存放内存单元编号的变量
    3. 不过通常把指针变量简称为指针
  • 静态内存和动态内存的区别

    1. 静态内存由系统自动分配,自动释放,在栈中分配,函数终止才会被系统自动释放

    2. 动态内存由程序员手动分配,手动释放,在堆中分配

猜你喜欢

转载自blog.csdn.net/qq_40860934/article/details/104486862