浅谈-“指针”

为什么要使用指针?

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

相关推荐
fqbqrr4 小时前
2601C++,cmake与导入
c++
fqbqrr5 小时前
2601C++,编写自己模块
c++
王老师青少年编程8 小时前
2025年12月GESP真题及题解(C++七级): 城市规划
c++·gesp·csp·信奥赛·七级·csp-s·提高组
寻星探路9 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
我叫袁小陌10 小时前
C++多线程全面详解
开发语言·c++
m0_7482500310 小时前
C++ 官方文档与标准
开发语言·c++
matlabgoodboy11 小时前
程序代做python代编程matlab定制代码编写C++代写plc设计java帮做
c++·python·matlab
DYS_房东的猫11 小时前
《 C++ 零基础入门教程》第6章:模板与 STL 算法 —— 写一次,用万次
开发语言·c++·算法
点云SLAM11 小时前
C++ 静态初始化顺序问题(SIOF)和SLAM / ROS 工程实战问题
开发语言·c++·slam·静态初始化顺序问题·工程实战技术·c++static 关键字
pen-ai12 小时前
打通 Python 与 C++ 的参数传递机制
开发语言·c++·python