zoukankan      html  css  js  c++  java
  • 复习C语言基础知识(day02)

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