• C++学习Day2


    结构体指针

    struct student
    {
    string name;
    int age;
    
    }
    int main()
    {
    1.创建学生结构体变量 
    struct student s={"张三",18};
    一般会简便写成 student s={"张三",18};
    2.通过指针指向结构体变量
    struct student*p=&s;
    一般会简便写成 student*p=&s;
    结构体使用时候 s.name
    指针使用时候 p->name
    }
    

    结构体嵌套结构体

    struct student ( 被嵌套的要写到上面)
    {
    string name;
    int age;
    int score;
    }
    struct teacher
    {
    int id;
    int age;
    struct student stu;
    }
    int main()
    {
    teacher t;
    t.id=10;
    t,age=28;
    t.stu.name="小王"
    }
    

    结构体做函数参数和变量一样,分为值传递(正常写)和引用传递(struct student * stu),将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来

    结构体中const

    用来将结构体改为只读,在函数使用结构体的时候的形参改为 const student *s,可以防止误操作改变struct的值

    C++内存的分区模型

    • 代码区:存放函数体的二进制代码,由操作系统进行管理
    • 全局区:存放全局变量和静态变量以及常量
    • 栈区:由编译器自动分配释放,存放函数的参数值(形参),局部变量等 局部变量地址不要返回!不要return局部变量,只有第一次使用的时候是有的,因为编译器做了一次保留,第二次就变成乱码了,但是new过之后的局部变量不会被释放
    • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 c++中利用new可以把变量开辟到堆区
     int *func()
     {
     int*p=new int(10);
     return p;
     }
    

    new关键字返回该数据类型的指针

    C++引用(起别名)

    数据类型 &别名=原名 别名可以是原名,即引用传递 就是c#里的ref,需要函数命名时候 void example (int &a,int &b) ,这样外面的a和b就相当于被这里引用,他们改变的值指向同一内存地址,example 里a,b的改变外面的a,b也相应改变
    int &b=a;
    使用时,必须要初始化,且初始化之后不能改变

    引用做函数的返回值

    不要返回局部变量的引用

    int & test()
    {
    int a=10; //局部变量是在栈里的,只有new才会到堆里,所以是非法操作
    return a;
    }
    

    函数的调用可以作为左值 即可以写 test()=1000;

    int & test()
    {
    static int a=10; //静态变量存放在全局区,全局区系统结束之后才会释放,也就是会内存增加,一直存在,直到程序结束
    return a;
    }
    
  • 相关阅读:
    A*算法的原理 <转>
    Unity性能优化之 Draw Call原理<转>
    关于XML中:XmlNode和XmlElement的涵义及不同之处
    MySql 数据库连接池
    代码中批量执行Oracle SQL语句
    科密指纹考勤机B329采集
    VB网络编程(webbrowser+Inet+抓包封包+经验)
    Lambda表达式
    网络编程
    多线程
  • 原文地址:https://www.cnblogs.com/dengzhekaihua/p/15873693.html
Copyright © 2020-2023  润新知