C++学习日记 | Lecture 5 指针

资料来源:南科大 于仕琪 C/C++ Program Design
LINK:

  1. CPP/week05 at main · ShiqiYu/CPP (github.com)
  2. 5.1-pointers_哔哩哔哩_bilibili
  3. 5.2-pointers-and-arrays_哔哩哔哩_bilibili
  4. 5.3-allocate-memory-C-style_哔哩哔哩_bilibili
  5. 5.4-allocate-memory-CPP-style_哔哩哔哩_bilibili

0 概述

        本节主要介绍指针、数组以及计算机内存分配理论。

Pointers 指针

  • 指针变量里存储的是地址,加上*后就是只向地址上的值

1.1 普通指针

int num = 10;
int * p1 = NULL, * p2 = NULL; // declaration two pointers, initialized to 0
p1 = # // take the address of num, assign to p1
p2 = # // take the address of num, assign to p2
*p1 = 20; // assign 20 to num
*p2 = 30; // assign 30 to num

  •  p1 p2 均指向num开始的位置
  • 利用p1和p2指针对num数值进行修改了两次
  • cout<<*p1 输出和 cout<<num 输出一样

1.2 结构体指针

  • 结构体中使用指针去指向结构体中的成员member, p->member 和 (*p).member 是等价的
student为12个字节(因为长度必须为2的倍数,所以有三个补足)
  • * pStu = &stu 使得指针指向结构体开始的位置

  • 通过使用指针修改了结构体stu内的数据

1.3 指针存储的地址

由于指针指向的是地址,因此可以输出其地址

  • 在C语言中,可以使用%p输出地址(其实也可以用unsigned int类型输出,但是地址可能是32/64位,不一定是无符号整型,因此用%p可以自动匹配)

  • 指针实质:存储地址

  • 1.4 指针的指针

  • 可以通过指针的指针连环指向num

1.5 常数指针

  • const int * p1 --不能通过常数指针修改指向的内容num,直接修改num是可以的
  • int * const p2 --指针指向的地址是恒定的,不能修改
  • const int * const p3--地址和内容都不可以修改
  • 用途:可以在函数的传递中常数指针,防止数据被修改。
  • 注意:常数指针不能赋值给普通指针,否则会报错。

2 指针和数组

2.1 数组的地址

2.2 数组的名字

结果:前三个printf结果一致
  • 可以认为数组是一个指针,存的就是一个地址
  • 对数组的取地址操作不是指针的指针
  • 数组首元素地址就是数组的地址

2.3 指针运算

  •  指针加减的单位是元素
运算过程中注意越界问题 

2.4 指针和数组的区别

  • 数组是一个常数指针,指向的地址不能更改。
  • 使用sizeof()进行操作时,数组的结果为 元素*sizeof(类型);指针返回的结果为指针所存储地址占用的大小(4或8)。

3 C语言内存分配

3.1 系统存储结构

实际上并不一定是这个结构,只作为参考即可

3.2 内存分配

为什么使用动态内存分配-LINK:【C语言进阶篇】动态内存分配和数组的动态内存分配_c语言动态内存分配二维数组-优快云博客

3.3 内存释放

4 C++中的内存分配

4.1 内存分配

 4.2 内存释放 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子异术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值