不同情况下*&p和&*p的区别(指针)

简介: 不同情况下*&p和&*p的区别(指针)

一说到指针,不少同学就会觉得云里雾里。首先要明白,指针和地址是一个概念;然后明白指针和指针变量的区别。


先理解地址和数据,想象内存里面是一个个的小盒子,每个盒子对应一个编号,这个编号就是地址,盒子里存放的就是数据。


&是取地址运算符,如有 int a; 即有一个小盒子里面存放的数据起名叫a,&a就是取a的地址,即该盒子的编号。


*(地址)是取值运算符,这里*是解引用操作符,可以理解成打开对应地址编号的盒子,取出里面的数据。*(&a) 就是打开a对应的小盒子,取出里面的数据,即*(&a)和a等价。


我们定义一个指针变量int *p; p是指针变量,专门用来存放地址。


int *p=&a;相当于int *p; p=&a;


p存放的是a的地址,*p也等价于 a。指针变量p既然是变量,也同变量a一样对应一个小盒子,也有一个地址编号,&p就是取指针p的地址。这样就好理解二级指针了。


*p和**p的区别


int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值


int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)


例:

inta=5;//定义整形变量
int*p=&a;//定义一个指针指向这个变量
int**p1=&p;//定义一个二级指针指向p指针
/*   那么取出5的方式都有哪些呢? */printf("a=%d",a);printf("a=%d",*p);printf("a=%d",**p1);


以上3行输出的值都是5 。


回过来看标题问题:*&p和&*p


根据运算优先级,*&p 等价于*(&p)。&*p 等价于&(*p)。


1、如果p是int *指针变量,那么*&p = p,&*p = p,都是p,但还没定义p指向哪,存的是谁的地址。


2、如果p是一个int变量,那么*&p = p;而&*p是非法的,因为*p非法。


比如int p =10;那么*&p = *(&p) = p = 10(即从p的地址取值),而&*p = &(*p) 则非法,因为p=10,*10是取内存地址为10的值,这在c语言中是不合法的。

相关文章
|
6月前
|
存储 Cloud Native Linux
C++指针和引用的作用以及区别
C++指针和引用的作用以及区别
|
21小时前
|
存储 前端开发 程序员
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
|
21小时前
|
存储 C语言
链表—初始化指针变和创建新的节点------区别应用分析
链表—初始化指针变和创建新的节点------区别应用分析
|
1天前
|
存储 安全 编译器
你了解引用和指针的区别吗?
你了解引用和指针的区别吗?
|
7天前
|
存储
引用和指针的区别
引用和指针的区别
11 3
|
8天前
|
存储 人工智能
字符指针变量和字符数组注意事项(区别)
字符指针变量和字符数组注意事项(区别)
9 0
|
8天前
|
存储 C语言
c语言函数指针和指针函数的区别,以及回调函数的使用。
c语言函数指针和指针函数的区别,以及回调函数的使用。
12 0
|
8天前
|
存储 C语言
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)
|
7月前
|
存储 安全 Go
Golang 语言 method 接收者使用值类型和指针类型的区别
Golang 语言 method 接收者使用值类型和指针类型的区别
30 0
|
8天前
|
存储
指针函数和函数指针区别
指针函数和函数指针区别
34 0

热门文章

最新文章