C编程

2019-12-11  本文已影响0人  litongde
C语言基础.jpg

C语言学习路线及重难点

Mac系统及常用工具

Mac系统是基于Unix内核的图形化操作系统,现行的最新的系统版本是macOS Catalina 10.15
(当下对应的最新版本iOS 13.3、watchOS 6.1.1、Xcode 11.3、Swift 5.1、TestFlight 2.6)

Mac软件安装,比较好用的网址

Mac下如何显示隐藏文件

常量、变量

常量,表示一些固定的数据,也就是不能改变的数据。
变量,表示的数据是可以经常修改的。作用域又分局部变量和全局变量

变量的存储分析

一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间又是不一样的

运算符

算术运算符(+,-,*,/,%)、关系运算符(>,<,>=,<=,==,!=)与逻辑运算符(&&,||,!)、按位运算符(&、|、^、~、<<、>>)

求余(%)运算符注意事项

m%n 求余,相当于m/n 获取余数

自增、自减运算符

int num = 3
++a a++
表达式值 4 3
变量num值 4 4

循环

多重循环的嵌套、排序、查找

函数

C源程序是由函数组成,main函数是主函数,它可以调用其它函数,而不允许被其它函数调用

Xcode运行原理:

编译--->.o(目标文件)--->链接--->.out 执行 可以手动编译步骤,终端输入:

  1. 编译 命令: cc -c main.c(翻译我们自己的代码)
  2. 链接 命令: cc main.o(将我们自己的代码和系统的以及其他依赖文件的代码组合在一起)
  3. 执行 命令: ./a.out

进制

常见的进制:十进制、二进制、八进制、十六进制

了解进制间转换

例如: 二进制11转换为10进制
0b1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3
= 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8
= 1 + 2 + 0 + 8
= 11

原码、反码、补码

例如:
9 ——> 存储在内存中 ——> 二进制 1001
9是整型 == int == 4个字节 == 1个字节是8位 == 整型有32位
则:
0000 0000 0000 0000 0000 0000 0000 1001 (原码)
正数的反码就是正数的原码
正数的补码就是正数的原码
总结:正数的原码反码补码都是一样的,三码合一

-9 ——> 存储在内存中 ——> 二进制
其实二进制的第一位是二进制的符号位,
如果该位是0代表这个数是一个正数
如果该位是1代表这个数是一个负数 则:
1000 0000 0000 0000 0000 0000 0000 1001(原码)
反码:符号位不变,其他位取反(0变1,1变0)
1111 1111 1111 1111 1111 1111 1111 0110(反码)
补码:反码 + 1 就是补码
1111 1111 1111 1111 1111 1111 1111 0111(补码)

为什么引入原码、反码、补码?

位运算符

类型说明符

数组

数组遍历,长度计算方法为:
数组的长度 = 数组占用的总字节数 / 数组元素占用的字节数,如int length = sizeof(ages) / sizeof(int)

数组内部存储细节

  1. 计算机会给数组分配一块连续的存储空间
  2. 数组名代表数组的首地址,从首地址位置,依次存入数组的第1个、第2个....、第n个元素
  3. 每个元素占用相同的字节数(取决于数组类型)
  4. 并且数组中元素之间的地址是连续的

二维数组及多维数组

字符串

char name[9] = "lnj"; //在内存中以“\0”结束, \0ASCII码值是0
char name1[9] = {'l','n','j','\0'};
char name2[9] = {'l','n','j',0};
char name3[9] = {'l','n','j'};//静态数组如果没有赋值默认就是0,0就相当于\0

指针

什么是指针变量

指针变量定义包括两个内容

值传递、引用传递

构造类型及结构体

在C语言中,构造类型有以下几种

结构体存储原理

结构体是如何分配存储空间 内存对齐

  1. 结构体会首先找到所有属性中占用内存空间最大的那个属性,然后按照该属性的倍数来分配存储空间
  2. 会从第0个属性开始分配存储,如果存储空间不够就会重新分配,如果分配空间有剩余,能容纳下后面属性时那么后面属性数据会存储到剩余的存储空间中
  3. 会从第0个属性开始分配存储,如果存储空间不够就会重新分配,并且会将当前属性的值直接存储到新分配的存储空间中,以前剩余的存储空间就不要了

结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题)

预处理指令

C语言提供了多种预处理功能,如 宏定义、条件编译、文件包含 等。

宏定义(宏名一般用大写字母)

条件编译

#if-#else 条件编译指令

#if 常量表达式
  ..code1...
#else
  ..code2...
#endif

#ifndef 条件编译指令

#ifndef 标识符 程序段1
#else 程序段2
#endif

文件包含 #include

const

技巧

上一篇下一篇

猜你喜欢

热点阅读