浅谈-“指针”

为什么要使用指针?

1.函数的值传递,无法通过调用函数,来修改函数的实参

2.被调用函数需要提供更多的"返回值"给调用函数

3.减少值传递时带来的额外开销,提高代码执行效率

---> int a[10] ==> 40 字节

int *p; p=a; ==> 4 字节

指针的定义

int *p; // int *p1, *p2;

或者

int* p; // int* p1,p2; //p1 是指针, p2 只是整型变量

或者

int * p;

或者

int*p;//不建议

指针注意:

32 位系统中,int 整数占 4 个字节,指针同样占 4 个字节

64 位系统中,int 整数占 4 个字节,指针占 8 个字节

%p:格式控制符

"%p"中的p是pointer(指针)的缩写

一般以 > 十六进制整数 < 方式输出指针的值,附加前缀0x

打印地址 --> 指针即地址

//使用 16 进制打印,把地址值当成一个无符号数来处理

printf("p1=0x%p\n", p1);

printf("p1=0x%x\n", p1);

printf("p1=0x%X\n", p1);

int a = 8;

int *p= &a;

cout<<*p<<p;

--> 结果:*p=8 || p=a的地址

==> *p = a:* 特殊运算符:解引符

什么是空指针?

空指针,就是值为 0 的指针。(任何程序数据都不会存储在地址为 0 的内存块中,它是被操作系

统预留的内存块。)

int *p = 0;

或者

int *p = NULL; //强烈推荐

空指针的使用

1)指针初始化为空指针

int *select = NULL;

目的就是,避免访问非法数据。

*p++ 的概念

在 p 当前地址的基础上 ,自增 p 对应类型的大小, 也就是 p = p+ 1*(sizeof(指针类型));

如指针 + 1,并不是在指针地址的基础之上加 1 个地址,而是在这个指针地址的基础上加 1 个元素占用的字节数。

(1)指针和指针可以做减法操作,但不适合做加法运算;

(2)指针和指针做减法适用的场合:两个指针都指向同一个数组,相减结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数

(3)不同类型的指针不允许相减

void * 空类型指针

1.不允许做算术运算!

2.可以做强制转化

3.其他类型可以转化为void *指针

相关推荐
ximu_polaris13 小时前
设计模式(C++)-行为型模式-观察者模式
c++·观察者模式·设计模式
故事和你9114 小时前
洛谷-算法2-1-前缀和、差分与离散化1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
handler011 天前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
我头发多我先学1 天前
C++ 模板全解:从泛型编程初阶到特化、分离编译进阶
java·开发语言·c++
星星码️1 天前
C++选择题练习(一)
开发语言·c++
小苗卷不动1 天前
OJ练习之疯狂的自我检索者(简单)
c++
LUVK_1 天前
第七章查找
数据结构·c++·考研·算法·408
迷途之人不知返1 天前
vector
c++
khalil10201 天前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
小苗卷不动1 天前
进程与线程的核心区别
c++