指针的初讲

指针

1.什么是指针

const int a;

其中,const 是起到修饰的作用,就算没有consta依然是整形变量

int* p;

同理,int也是作为一种修饰,真正将p定义为指针的是*

int 是修饰地址储存的类型,

*是地址运算符,为的是将后面的变量变为地址,

p是指针

就像int是整形,a是变量一个道理

p只是一种特殊的变量,叫指针,他只能存地址

比如服装大楼,int代表服装,表示我这个大楼是卖服装的,p是大楼

2.* 地址 使用过程详情

1. 地址

0X 0012ff60

其中,0X代表16进制,16进制的[两个位](【】 【】 )等于2进制的[8个位](【】 【】 【】 【】 【】 【】 【】 【】),2进制的8个位等于1个字节

2.运算过程
int *p;

p=&a;

(1). P=0x 0012FF60(a的地址)

(2). 指针p储存的数据为 [60] [ff] [12] [00]

(3). 地址为

地址内存
0x0014f367[60]
0x0014f368[ ff ]
0x0014f369[12]
0x0014f36A[00]
3. int* 与 int**

void*

0x0012FF60没有储类型的时候

int*

0x0012FF60地址储存int类型时候

int**

0x0014f367说明这个地址的内存存储的是一个地址0x0012FF60

3. 解引用运算

*0x0014f367解引用就是使用内存

运算过程

1.去星解引用

*0x0014f367(char *) 解引用,在这个类型的基础上,去掉一个星

0x0014f367(char) 要访问的内存 的访问规则char

2.赋值给变量

int a=10;

0x0012ff60 int * [0A] [00] [00] [00]

p = &a;
c = * p;

所以,c = * 0x0012ff60(int *) 解引用,访问规则是int,所以4个字节

所以,c = [0A] [00] [00] [00]

3.常量强转为地址

0x008ff8f0的10进制数字为9435376

* (int *)9435376=100;

其中,(int *)是将后面的变量强转为地址

第一个 * 是将地址解引用

9435376指针不参与任何解引用

4.常见错误

请添加图片描述

如果不将a初始化,而直接使用地址指针访问a的内存,并赋值,程序依然会报错

因为不正规,用地址访问到a的内存只是一个意外,但是查看a的内存,会发现数据已经被赋值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值