浅谈-“指针”

为什么要使用指针?

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

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

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

---> int a10 ==> 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 *指针

相关推荐
乐观勇敢坚强的老彭28 分钟前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
我变成萤火虫1 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
buhuizhiyuci1 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
啦啦啦啦啦zzzz2 小时前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
键盘会跳舞2 小时前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石
c++·右值引用·移动语义
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
lidtao3 小时前
青少年信息学奥赛C++四阶段学习路线(L1-L4完整体系)
c++·学习·软件工程·教培资源分享
djjjx.3 小时前
【 C++ 】多态
开发语言·c++·多态
鸿芯微控科技3 小时前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试
ShineWinsu15 小时前
对于C++:C++11中lambda、function、bind的解析
c++·面试·笔试·开发·lambda·bind·function