浅谈-“指针”

为什么要使用指针?

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

相关推荐
kyle~4 小时前
C++---value_type 解决泛型编程中的类型信息获取问题
java·开发语言·c++
NiNi_suanfa7 小时前
【Qt】Qt 批量修改同类对象
开发语言·c++·qt
信奥胡老师8 小时前
苹果电脑(mac系统)安装vscode与配置c++环境,并可以使用万能头文件全流程
c++·ide·vscode·macos·编辑器
妖灵翎幺8 小时前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
star _chen8 小时前
C++实现完美洗牌算法
开发语言·c++·算法
繁星星繁9 小时前
【C++】脚手架学习笔记 gflags与 gtest
c++·笔记·学习
路痴楷10 小时前
无法定位程序输入点问题
c++·qt·visual studio
Source.Liu10 小时前
【LibreCAD】 RS_Units 类完整解析
c++·qt·rust
我是一棵无人问荆的小草11 小时前
编码演变史
开发语言·c++
potato_may12 小时前
CC++ 内存管理 —— 程序的“五脏六腑”在哪里?
c语言·开发语言·数据结构·c++·内存·内存管理