zoukankan      html  css  js  c++  java
  • C++ 数据类型提高+内存四区

    # 这一章节全部是C语言的内容
    # 数据类型提高
    **注意**
    1.数组作为形参会退化为指针(验证,传参后用sizeof进行打印,可以看出打印出数组的字节为一字节)
    2.形参在函数上和函数内是一样的,只不过对外开放

    # 内存四区

    ##### 数组和数组元素指针
    ```
    void main(){
    int a;//告诉编译器分配4个字节内存
    int b[10];//告诉编译器自己分配40个内存

    printf("b:%d,b+1:%d,&b:%d,&b+1:%d",b,b+1,&b,&b+1);
    printf("hello... ");
    system("pause");
    }
    ```
    **注意**
    - b+1和&b+1结果不一样,因为代表的数据类型不一样
    - b代表的是整个数组首元素地址
    - &b代表的是整个数组的地址
    (验证方法,打印地址或者sizeof验证)

    ##### 数据类型的别名
    ```
    typedef struct Teacher{
    char name[64];
    int age;
    }Teacher;
    void main(){
    Teacher t1;
    }
    ```
    ```
    struct Teacher{
    char name[64];
    int age;
    }Teacher;
    void main(){
    struct Teacher t1;
    }
    ```
    可以看出typedef的实际功能是将**结构体**定义成一个可以用的变量,对**基本类型**也有效

    ##### C语言数据类型封装
    1.void字面意思是无类型,void则是无类型指针,可以指向任何数据
    2.用法一:数据类型分封装
    ```
    int initHardEnv(void **handle)
    ```
    3.用法二:void返回值表示无
    4.void指针的意义
    只有相同类型的指针才可以互相赋值
    ```
    举例:
    char *p2=NULL;
    p2=(char*)malloc(100);
    如果不进行强制类型转换,那么默认是void指针
    void *p1=malloc(100);
    这个是可行的
    ```

    思考:
    C语言中,函数是一种数据类型么?以及函数可以重定义么?
    答案是可以的,之后在函数和回调函数中可以提到

    ##### 变量本质
    变量的本质是一段连续内存空间的别名

    ##### 内存四区模型
    修改变量几种方法
    1.直接修改内存
    2.间接修改内存

    ```
    void main(){
    int a;
    a=10;//直接赋值
    printf("%d ",a);
    //17823600打印查看到a的值
    *((int*)17823600)=200;//间接赋值,通过内存
    printf("%d ",a);
    {
    p=17823600;
    *p=200;//指针间接赋值
    }
    system("pause");
    }

    ```
    3.对内存空间能不能再起别名?可以

    **变量3要素**
    名称,大小,作用域
    生命周期(比如在代码块中生命周期仅仅在代码块中)

    ##### 内存四区的建立流程
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019052420393831.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdHRsZVBhZ2U=,size_16,color_FFFFFF,t_70)
    流程:
    1.操作系统把物理硬盘load到内存
    2.操作系统把C代码分为4个区
    3.操作系统找到main函数入口执行

    各元素分析
    栈区(stack),由编译器自动分配释放,存放函数的参数值,局部变量值等
    堆区(heap),由程序员释放,程序员不释放,则程序结束后被系统回收
    全局区(static),全局变量和静态存储放在一块,放变量
    常量区,存放常量
    代码区,存放函数体和二进制代码

    **注意:赋值语句直接在CPU执行**
    # 抽象接口Socket的C语言API
    ```
    //Socket.h
    #ifndef _SOCKET_H

    #ifdef _cplusplus
    extern "C"{
    #endif

    //第一套api函数
    //socket客户端初始化
    int socketclient_init(void **handle);
    //socket客户端发送
    int socketclient_send(void *handle,unsigned char *buf,int buflen);
    //socket客户端报文接受
    int socketclient_recv(void *handle,unsigned char *buf,int *buflen);
    //socket客户端环境释放
    int socketclient_destory(void **handle);

    //第二套api函数
    //socket客户端初始化
    int socketclient_init2(void **handle);
    //socket客户端发送
    int socketclient_send2(void *handle,unsigned char *buf,int buflen);
    //socket客户端报文接受
    int socketclient_recv2(void *handle,unsigned char **buf,int *buflen);
    int socketclient_free(unsigned char **buf);
    //socket客户端环境释放
    int socketclient_destory2(void **handle);

    //技术点分析
    //1级指针
    //2级指针
    //void **handle类型封装的概念 业务模型封装的概念

    #ifdef _cplusplus
    }
    #endif

    #endif
    ```
    我们要学会断层抽象出业务模型

    看到14集

  • 相关阅读:
    codeforces C. Fixing Typos 解题报告
    codeforces B. The Fibonacci Segment 解题报告
    codeforces B. Color the Fence 解题报告
    codeforces B. Petya and Staircases 解题报告
    codeforces A. Sereja and Bottles 解题报告
    codeforces B. Levko and Permutation 解题报告
    codeforces B.Fence 解题报告
    tmp
    API 设计 POSIX File API
    分布式跟踪的一个流行标准是OpenTracing API,该标准的一个流行实现是Jaeger项目。
  • 原文地址:https://www.cnblogs.com/littlepage/p/10989595.html
Copyright © 2011-2022 走看看