一、大型软件组织
定义规则,规则就是协议。用户和中介的接口。
软件开发的过程:
定义规则,定义协议。软件为用户提供的功能。
在C语言中使用接口实现。接口就是函数。
两种用户 函数的使用者 函数的实现者
你要站在函数的实现者角度考虑函数。
、函数要完成的功能
、需要传递给函数的参数
、函数的返回值的类型
附加信息
作者:
时间: 将协议的每个部分都要实现,在C语言中如何来表示协议。
头文件
为了避免重复包含,需要使用头文件卫士。 #ifndef 宏
#define 宏
/*文件的包含*/
/*宏定义*/
/*类型的定义*/
/*函数的声明*/
/*变量的声明*/
#endif
什么叫变量的声明?
变量的声明就是变量作用域的扩充,并不为这个变量分配空间。变量的空间已经在其他文件中分配。 变量的定义是为这个变量分配空间的。 头文件中协议的实现者 源程序
头文件中协议的使用者 源程序 main 举例说明 软件开发的组织 代码参见 tmath文件夹。 在工程中,编译的基本单位是源文件。 如何将多个源文件拼接成一个可执行文件? 链接的过程
nm 二进制文件
用来查看二进制文件中包含的符号。
什么是符号?
函数的名字 全局变量的名字 静态局部变量
tarena@ubuntu:~//UC/day02/tmath$ nm add.o
T t_add
0000000e T t_sub tarena@ubuntu:~//UC/day02/tmath$ nm mul.o
0000000c T t_div
T t_mul tarena@ubuntu:~//UC/day02/tmath$ nm test.o
T main
U printf
U t_add
U t_div
U t_mul 链接发生在程序的编译阶段。这种链接称为静态链接
有一种链接发生在代码加载到内存执行的时候,这种链接称为动态链接。 运行时文件
*.o #include <>和“”?
<> 在系统指定的路径下找头文件
“” 首先在当前路径下找,如果没有找到,再到系统指定的路径下找。
什么是系统指定的路径?如何知道系统的指定路径?
在编译的过程中使用 -v参数。
这个参数的意思就是将这个编译链接的过程中产生的信息输出到显示器。 二、复习C语言 (指针、类型别名)
、变量和常量
不管是变量还是常量,在程序执行的过程中,都占用内存空间。
变量内存空间里的值是可以改变的,常量空间里的值是不能被改变的,是只读的。
const int a=;
int *p=&a;
*p=; 、数据类型
什么是数据类型?
数据类型是在内存中占用的字节数。再者就是这些数据从内存中取出来的组织方式。
int var_a=;
char var_c='v';
short
long
float
double
void
* 指针不是地址
int *p;
举例说明 指针的理解 代码参见point.c gcc的参数:
-Wall 显示所有的警告信息
-Werror 显示所有的错误信息,警告也作为错误处理。 int *p;
int **p;
指针和一维数组的关系
int arr[];
arr是一个数组类型常量。
arr是数组的名字。 这个数组里有三个元素。每个元素都是int类型的。
三个元素的地址空间是连续的。
int *p=arr;
p++;
char *q=arr;
q++;
char *p[]; p是数组的名字,数组里的每一个元素都是指针类型的,这就是指针数组
int main(int argc,char *argv[]){ } 二维数组
int arr[][]={{,,},{,,}};
arr[] 和arr
int[] 类型
int (*p)[]; p是指针类型的变量
int []; p+ 数组指针。 p=arr arr是数组的名字,常量
p是指针类型的变量
函数和指针的结合
void *malloc(size_t size);
int *p=(int *)malloc(); int (*fun_t)(int,int);
fun_t 是指针类型的变量
int (int,int)是指针类型变量的访问方式。 int t_add(int,int); fun_t=add; int (*fun_t[])(int,int);
fun_t 数组的名字 数组里有4个元素。每个元素都是指针类型的。 代码参见 tmath文件夹中的point.c
数据的高字节存放在内存的低地址中。大端 主机字节序 作业:编写代码,测试自己的主机字节序。 、运算符的优先级及其结合性
、变量的作用域和生命周期
int *p;
int **p;
int *p[];
int (*p)[];
int *f(void);
int (*f)(void);
int (*f[])(void); int char
int arr[];
int *p=arr;
*(p+)

复习C语言基础知识(day02)的更多相关文章

  1. 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数

    Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...

  2. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  4. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  5. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  6. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  7. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  8. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  9. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

随机推荐

  1. AOP代理分析

    一:代理 代理类和目标类实现了同样的接口.同样的方法. 假设採用工厂模式和配置文件的方式进行管理,则不须要改动client程序.在配置文件里配置使用目标类还是代理类,这样以后就非常easy切换.(比如 ...

  2. 查询结果多个合并一个GROUP_CONCAT(EmployeeName)

    一个课程多个教师,查询结果单条显示,其中课程与教师关系是一一对应存入表中

  3. 多工程联编的Pods如何设置

    多工程联编的Pods如何设置 (2014-07-17 13:57:10) 转载▼ 标签: 联编 多工程 分类: iOS开发 如今,CocoaPods使用越来越多,几乎每个项目都会使用到.有时候我们的项 ...

  4. 虚函数的特点就是执行的时候会下降到子类去执行同名覆盖函数 good

    var t: TBitBtn;begin t:=TBitBtn.Create(nil); t.Name:='BitBtn100'; t.parent :=Self; // 这里下断点end; 一路跟踪 ...

  5. oc57--Category 分类

    // // main.m // Category基本使用:1.不修改类而扩充类.2.对于一个庞大的类,分模块开发. #import <Foundation/Foundation.h> #i ...

  6. case when in sql server's stored procedure

    https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql Evaluates a list of c ...

  7. B1041 [HAOI2008]圆上的整点 数学

    这个题一开始看着没什么思路,但是一看题解就明白了不少,主要是数学证明,代码很好写. 贴个网址: hzwer 题干: 题目描述 求一个给定的圆(x^+y^=r^),在圆周上有多少个点的坐标是整数. 输入 ...

  8. B1270 [BeijingWc2008]雷涛的小猫 dp

    这个题的原始方法谁都会,但是n^3会T.之后直接优化,特别简单,就是每次处理出来每层的最大值,而不用枚举.之前没这么做是因为觉得在同一棵树的时候没有下落,所以不能用这个方法.后来想明白了,在同一棵树上 ...

  9. Coursera Algorithms week2 栈和队列 练习测验: Queue with two stacks

    题目原文: Implement a queue with two stacks so that each queue operations takes a constant amortized num ...

  10. Python 30 网络编程介绍

    1.目标:编写一个C/S架构的软件 C/S:Client ---------------  基于网络 ------------------- Server B/S:Browser ---------- ...