浅谈-“指针”

为什么要使用指针?


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

上一篇:javaEE初阶——多线程(五)


下一篇:一堆喷儿香喷儿香的工具网站-已经收藏-搜嗖工具箱!