浅谈-“指针”

为什么要使用指针?

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 *指针

相关推荐
喜欢吃燃面2 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
FlightYe3 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
ShineWinsu3 小时前
对于MySQL:数据库的操作的解析
linux·数据库·c++·mysql·面试·笔试·库的操作
云小逸4 小时前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++
夜航海图4 小时前
S-57 数据解剖:把一个 ENC 文件拆给你看
c++
(Charon)4 小时前
【C++】网络缓冲区设计(三):Chain Buffer链式缓冲区、动态扩容与跨节点读写
服务器·c++
软行5 小时前
LeetCode 每日一题 3876. 构造奇偶一致的数组 II
c++·算法·leetcode
繁星蓝雨6 小时前
C++设计原理———重载(extern “C“的由来、顺序依赖、语义依赖、overload、名称修饰符、对象操作、运算符重载、新增运算符、枚举和布尔类型)
c语言·c++·extern c·overload·重载·语义依赖·顺序依赖
handler016 小时前
【Linux】虚拟地址空间解析
linux·运维·c++·线程·进程·虚拟地址空间·虚拟地址
(Charon)6 小时前
【C++】网络缓冲区设计(二):Ring Buffer环形缓冲区、head/tail与跨界读写
开发语言·c++