学习笔记C++(结构体、指针、引用、栈——基本概念梳理)

先补充点结构体、指针、引用、堆栈基本知识

各一个学习视频的连接--基础版


结构体概念:特殊的类(需要表示一组集成的数据,不需要用函数计算)

定义:

struct 机构体名{

公有成员

protected:

保护成员

private:

私有成员}

注:结构体的成员既可以是数据成员也可以是函数成员


内存空间的访问形式:

通过变量名访问/通过地址访问

基本语句还有其他知识点交叉部分参考

指针概念:内存地址,用于间接访问内存单元(所以我们在指针中可以存放其他变量的地址可以存放其他代码的地址---就是所指针里容纳的是所指向data的地址,它本身也是占内存空间的)

例子:static int i;(假设i的地址是2000)

static int* ptr = &i (这里ptr的初始化就是2000,这里的*代表指针,int代表指向的对象类型)

使用:指针运算是个寻找地址的过程

如:*ptr = 3---先寻到地址2000,把3放到2000处,即i= 3,这里的3 放进去占有的字节数就等于定义的对象类型字节数,这里之前定义的是int 所以3 就占用4个字节

所以这个运算分两步寻址、赋值


引用基本概念:引用只是别名,不是实体类型(也就是说c++编译器不为引用单独分配内存空间),对一个对象的引用,就是直接对这个对象的操作

使用:

1、引用必须初始化(引用必须指向所引用的对象)

int a = 3;

int& ra = a;

int &b ;//错误,引用必须初始化

const int &b = 10;//正确对字面值常量10的引用

2、引用不能为空

int &b ;//错误,引用不能为空必须有所引用的对象

3、引用不能更换目标

#includeusing namespace std;int main(void){

    int a = 3;

    int b = 4;

    int& ra = a;

    // int& ra = b;//错误,多次初始化    return 0;

}

辨析:引用和指针的联系和区别

1、存在空指针,但是不存在空引用

void * a;//空指针,合法//

void& b;//空引用,不合法

2、但是指针可以不初始化,而引用必须初始化

3、存在指针数组 ,不存在引用数组

int* a[3] ={&x,&y,&z };//定义了一个有三个整形指针变量的指针数组 a ,合法 //

int& a [3] ={x,y ,z};//报错,不允许使用引用数组,因为引用没有内存的分配


栈:是一种只能从一端访问的线性群体,是后进先出的数据结构

计算过程

这里注意的是优先级高的可以入栈

基本操作:初始化、入栈、出栈、清空栈、访问栈顶,检测栈状态

模板例子

这里从top指向栈顶,push压入栈函数,pop弹出栈函数 ,清空栈clear函数,peek读取栈顶元素不删除它,还有判断栈是否empty是否full函数

模板实现

这里构造函数stack将指针top函数置成-1(初始状态)

push将数据&item压如栈里,先判断栈不满的情况下,top函数+1指向下一个可用的空间,将item放进去,出栈返回栈顶元素同理

模板实现

判断栈空、满、清空的基本设置

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,540评论 1 51
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,704评论 1 19
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 5,051评论 0 14
  • 曾听过一句话“人生如旅行”,各花入各眼,同样一句话,相信也是各人有各人的看法。我认为人生和旅行有同也有不同。 相同...
    长弓心悦阅读 333评论 0 2
  • 曾经默默想过,暗恋是所有爱情形式中最好的一种,它不牵涉除了自己之外的第二个人,那是旷日持久的单相思一个人的兵荒马乱...
    John小姐阅读 770评论 0 0