地址、指针、指针变量详解

指针和指针变量的关系
  • 指针就是地址,地址就是指针。
  • 地址就是一个内存单元的编号,如1001 (地址值(简称地址)不可以是小数,也不可以是负数)。
  • 指针变量就是存放内存地址的变量。

指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。


cd4356

p、*p 和 &p的区别
  • * 取值运算符

  • & 取地址运算符

p是指针变量,它存储的是另一个同类型变量的地址
cd4356

*p表示p所指向的变量的值(即p存放地址对应变量的值。如下图,p存放的是变量i的地址,那么*p取的就是变量i的值)。所以*p等价于a,即*p=a
cd4356

&p表示指针变量p本身的地址(注意指针变量的地址指针变量的值的区别。如下图,指针变量p的值是变量i的地址;指针变量p的地址是其所在内存存储单元的地址)。所以p等价于&a,即p = &a &a = p
cd4356


如下图中,1001是指针变量p的地址,1007是变量i的地址。指针变量存放的是变量i的地址,也就是指针变量的值。所以p=1007,*p=5,&p=1001
cd4356
注意:p是指针变量,存放的是地址(内存单元的编号)。

  • 不能给指针变量赋数据值,如p = 100,这是错误的,无法通过编译;
  • 只能赋地址值,如p = &i;

注意:*p表示的是数据值,即p指针指向地址的内容。

  • 不能给*p地址值,如*p = &i; 这是错误的,无法通过编译;
  • *p表示的是数据值,所以只能赋数据值。如*p = 100;或将地址值 &i 强转成数据值,如*p = (int)&i;


星号*的用途

p是指针变量,*表示这是一个指针,int表示该指针变量所指向的数据的类型。 定义指针变量时的* 和 使用指针变量时的*意义完全不同。

  • 指针定义中的*,表示定义一个指针变量。(如int *p;表示定义一个int类型的指针变量)

  • 使用指针变量时的*,表示取值运算符。(如*p,表示获取指针变量p指向地址的内容)



int *p; 和 int **p; 解析
  • int *p;表示定义一个指向int类型的指针变量p

  • int **p; 表示定义一个指向int *类型的指针变量



引用

局部变量(方法内的变量),在方法执行完毕后,就会被释放。

  • fun1()和fun()2没有修改指针变量L的内容

  • fun()3是传引用调用,会修改实参的内容。&L表示取指针变量L的地址,拿到指针变量L的地址,就可以修改变量的内容了

什么是引用?

  • 引用是一个变量的别名,本身不单独分配自己的内存空间,而是与该变量共享一块内存空间。所以可以通过引用来修改变量的值。如下图的L3和L共享一块内存空间,可以通过L3来修改L的内容。

cd4356
地址、指针、引用、指针变量有什么区别

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家师曹先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值