在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

11-安全传输平台项目扩展-第01天(C复习-C++复习-keymngclient重构)

目录:
一、课程目标
二、安全传输平台项目扩展——C复习-C++复习
1、C语言知识体系复习-两个模型
2、C语言知识体系复习-指针做函数api实现
3、C语言知识体系复习-模拟函数调用入栈出栈内存模型
4、C语言知识体系复习-间接赋值的重要性和成立三个条件
5、C++语言知识体系复习-多态理解1
6、C++语言知识体系复习-多态理解2
7、C++语言知识体系复习-C和C++横向比较
8、C语言知识体系复习-回调函数
9、C++面向抽象类编程思想回顾
三、安全传输平台项目扩展——keymngclient重构
1、项目需求和方案
2、C++类对象之间的关系-依赖和关联
3、密钥协商客户端业务流复习
4、keymngclient设计与实现-思路
5、keymngclient设计与实现-keymngclient的hello
6、keymngclient设计与实现-LogHelper类
7、keymngclient设计与实现-myipc类
8、keymngclient设计与实现-KeyMng_ShmOp类
9、keymngclient设计与实现-应用程序框架类和业务流类设计思想
10、keymngclient设计与实现-keymngclientapp
11、keymngclient设计与实现-keymngclientop
12、keymngclient设计与实现-初始化流程编写
13、keymngclient设计与实现-初始化流程调试
14、keymngclient设计与实现-密钥协商编写和调试

 

一、课程目标

用C++重构安全传输平台

深入理解C语言知识体系

两个模型(函数调用、内存四区模型)
    指针做函数参数(一级指针、二级指针、三级指针;指针的输入和输出)
    函数指针做函数参数
    C语言项目开发理念:接口的封装和设计、模块之间解耦合

深入理解C++语言知识体系
    封装、继承、多态
项目开发中C++工具的应用    
    C++项目开发理念(面向抽象类编程)
进一步理解安全传输平台secmngclient和secmngserver的业务模型
    用C++做开发常见套路

 

二、安全传输平台项目扩展——C复习-C++复习

1、C语言知识体系复习-两个模型

》两个模型(函数调用、内存四区模型)

示例:main函数调用fun1()函数,fun1()函数调用fun2()函数,fun2()函数调用fun3()函数:

安全传输平台项目扩展——C复习-C++复习-keymngclient重构

问题1:在函数main中分配的内存,在fun3()中能用吗?

都能用

问题2:在函数fun3()中分配的内存 在main函数中能用吗?

内存  堆  栈  全局区(静态变量) 代码区——要看分配的内存在哪,全局和malloc(栈)得到的可以用

》理念:输入和输出

角度:站在被调用函数的调度去思考  函数1调用函数2

  输入:函数1调用函数2,在函数1中分配内存,供函数2使用

  输出:函数1调用函数2,在函数2中分配内存,供函数1使用

 

2、C语言知识体系复习-指针做函数api实现

》指针做函数参数(一级指针、二级指针、三级指针;指针的输入和输出)

案例1:指针做函数参数

需求:写一个接口 完成配置文件的读 要求一次性把N行数据 返给调用者

>dm01_指针做函数参数.c

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


//间接赋值成立的三个条件
//条件1: 定义两个变量 (形参 实参)
//条件2: 建立关联 若为函数调用 实参取地址 传给  形参 
//条件3: 在被调用函数中  *p 实参的地址 去 间接的修改实参的值 
//  用N级形参 去修改 N-1级实参的值

//写一个接口 完成配置文件的读 要求一次性把N行数据 返给调用者
int  getFileContent(char *pFileName/*in*/, char ***p, int *nLine)
{
    char **tmpP = NULL;
    int        i = 0;
    tmpP = (char **)malloc(sizeof(char *)* 10);
    if (tmpP == NULL)
    {
        printf("func getFileContent() err: ");
        return -1;
    }


    for (i = 0; i < 10; i++)
    {
        tmpP[i] = (char *)malloc(20);
        sprintf(tmpP[i], "%d%d%d", i, i, i);
    }

    //间接赋值
    *p = tmpP;  //*p实参的地址 放在=的左边 去间接的修改 实参的值
    //*p1 = *p2;
    *nLine = 10;
    return 0;
}

int  getFileContent_Free(char **p, int iLine)
{
    int i = 0;
    if (p == NULL)
    {
        return 0;
    }

    for ( i = 0; i < iLine; i++)
    {
        free(p[i]);
    }

    free(p);
    //p = NULL;

    return 0;
}


// 既可以把指针所指向的内存空间给释放掉 并且把实参重新赋值成NULLL
int  getFileContent_Free2(char ***p, int iLine)
{
    getFileContent_Free(*p, iLine);
    *p = NULL;
    return 0;
}


int main()
{
    int        ret = 0, i = 0;
    char    *myFileName = "c:\1.txt";
    char    **myP = NULL;
    int        myLine = 0;

    printf("hello...\n");

    //获取文件内容
    ret = getFileContent(myFileName, &myP, &myLine);
    if (ret != 0)
    {
        printf("func getFileContent() err:%d \n", ret);
        return ret;
    }

    //打印文件内容 按照行
    for (i = 0; i < myLine; i++)
    {
        printf("%s\n", myP[i]);
    }


    //getFileContent_Free(myP, myLine);
    getFileContent_Free2(&myP, myLine);
    system("pause");
    return 0;
}
dm01_指针做函数参数.c

相关文章:

  • 2021-08-08
  • 2021-12-29
  • 2021-08-17
  • 2021-11-05
  • 2021-11-28
  • 2022-12-23
  • 2021-06-21
  • 2021-08-26
猜你喜欢
  • 2021-10-14
  • 2021-11-15
  • 2022-12-23
  • 2021-10-14
  • 2021-07-23
相关资源
相似解决方案