指针

本文详细介绍了C++中的指针概念,包括指针的声明、解引用、指针类型如空指针、野指针和失效指针。讨论了指针的大小、指针运算及与数组、常量和void类型的交互。同时,阐述了指针与整型相加后的结果以及指针与数组的关系,强调了指针在数组名和下标运算中的作用。此外,还探讨了const关键字在指针中的使用,以及void指针作为泛型指针的特性。
摘要由CSDN通过智能技术生成

*号意义: 1.乘法     2. int *p    声明指针     3. p=&a; *p = 100;  解引用

int *s  *和变量名结合;  int *p,r;   (指针,整型)

指针种类: 空指针,野指针,失效指针

指针大小32位 4个字节,64位 8个字节

 

&ip =>  0x00d5f8ec                              &ip => 0x00d5f8ec 

  ip =>  0x00d5f904                                 ip =>  0x00d5f8f8

 *ip => a    (等价)                                   *ip => b

&*ip <=> &a    (等价)   

 

定义指针变量时,类型对指针变量起到2个作用。     

1.解析存储单元的大小

2.指针变量加1的能力。

typename *p;

p = p +1;被编译器解释成: p = p + sizeof(typename);

 

指针和整型加减后的结果仍是指针类型

后置++,是在所有语句执行完之后++;    x = *p++;    ==>   int x = *p; p++; 

                                                                  x = (*p)++;     ==>   int x = *p; (*p)++;

 

* 和 & 

eg: int a = 10; int *p = &a;

*&a 可以理解为 *(&a), &a 是 a 的地址,*(&a) 是取这个地址上的数据  ==>  a;

&*p 可以理解为 &(*p), *p 是 a, &*p 是 a的地址  ==>   p;

 

指针与数组

数组名被看作该数组的第一个元素在内存的首地址(仅在 sizeof 中例外,是数组所占内存大小),数组名在表达式中被自动转换成为一个指向数组第一个元素的指针常量

作为首地址,为指针常量,不允许    ++ar, ar = ar+1;

 

ar[i]   <==>  *(ar+i)  <==>  i[ar]

下标运算符[ ]是以指针作为操作数的,ar[i] 被编译系统解释为 *(ar + i)。

 

指针与const

const  在 * 左边 const int* 修饰指向;           const  在 * 右边 int* const修饰指针本身; 

consr int* p2 = &a;     可以读取,可以改变p2本身,不能改变指向的值。    int x = *p2;可以      p2 = &b;可以         不可以 *p2 = 200;

int* const p4 = &a;         int x = *p4;可以       *p4 = 200; 可以        p4 = &b;不可以      int* s = p4; 可以

 

无类型指针void

 

void *p =nullptr;  //泛型指针,是指针就都可以给void指针变量赋值;但是无法解析,无法+1;

sizeof(p); // 4  8               不可以解引用 sizeof(*p)

如果要给其他指针赋值,必须要进行强转;     void *p; int *ip = (int *)p;     double *dp = (double*)p;

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值