C++类结构体指针引用

文章目录

    • class
  • 结构体
    • struct
  • 进程
  • 指针和引用
    • 定义指针
      • 数组指针
  • 链表
    • 链表表示
      • 链表删除
      • 删除结点
      • 添加结点

class

定义:可以将变量打包在一起
privacy后面数组或者函数表示都是私有的只能在类里面调用,public表示在类外面和里面都可以公用

结构体

struct

结构体可以构造函数,内部可以写参数

#include 
using namespace std;
struct Person
{
    int age, height;
    double money;/* Person(){}默认无参数时调用 int main()里面Person p;*/

    Person(int _age, int _height, double _money)//可以调用参数,person是构造函数
    {
        age =_age;
        height = _height;
        money =_money;
    }
};


int main()
{
    Person p(18, 100, 10000);//含参数构造的函数
    return 0;
}

进程

有空间的概念,每一个程序长度有映射关系是该空间的数组,打开文件是独立的。
百度概念:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。
特征
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。

可以定义函数变量,局部变量,是自上而下运行。
百度概念:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈。

可以定义全局变量,初始化为0;
百度概念:堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆是非线性数据结构,相当于一维数组,有两个直接后继。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2)
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。

指针和引用

指针指向存放变量的值的地址,我们可以通过指针来修改变量的值。
百度概念:指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

指针的地址与原值的关系是,原值是a(此时a的地址相当于数组下标8位byte,若取得char c 定义c = ‘a’ ,地址输出cout << (void *) &c <

  1. 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。
  2. 引用初始化后不能被改变,指针可以改变所指的对象。
  3. 不存在指向空值的引用,但是存在指向空值的指针。

定义指针

实验
#include 
 using namespace std;
 
 int main()
 {
     int a = 3;
     int* p = &a;
     
     cout << (void *)p << endl;//a的地址
     cout << *p << endl;//*p = a = 3
     return 0;
 }
     /*
     *p += 5;输出*p表示a的地址增加5个值,但输出a还是原指针地址值
      */
 }int a =1int* p = &a;
定义*p = 12; cout << *p << endl; //*p变成12
此时a的值也有所改变为12

数组指针

&p = a 表示a的给指针取名字

#include 
using namespace std;

int main()
{
    int a[5] = {1,2,3,4,5};
    cout << a << endl;//表示输出第一个位置指针地址
    /*for (int i = 0;i<5; i++)
          int* p = &a[i];
          cout << (void*)p << endl;
    */
    for (int i = 0;i<5; i++)
    {
        cout << (void *) &a[i] << endl;//输出a数组5个地址
    }
    return 0;
}


链表

百度定义:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

如果p指针可以用p -> next = p表示存储结点地址而不是它的值;如果p不是指针可以用“.”调用p. next =p;

链表表示

Node *p = new Node(1);
或者 auto q = new Node(1);
表示返回地址存储1号结点地址;
auto q =new Node(1)//在二号节点地址
p -> next = q;//表示p指向构造新的结点q
一般的存到head里面是第一个结点地址,而不是他的值。

链表删除

是指原链表遍布过程中跳过,用next指向下一位;

删除结点

head->next = head ->next->next;//表示删除

添加结点

auto u = new Node(u);
u-> next = head;
head = u;
//表示在投部添加结点u;

你可能感兴趣的:(笔记,链表,数据结构,指针,c++)