C语言中学指针时*和&是相互补充的,为什么啊?

搞不懂,求详细解释就是说&*ptr和*&是等价的为什么啊... 搞不懂,求详细解释
就是说&*ptr和*&是等价的 为什么啊
展开
 我来答
AMKONG
2011-11-24 · TA获得超过349个赞
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:113万
展开全部
举个例子吧 int i 和 int *p 定义一个变量 i 和 一个指针p
p=&i; 意思就是p 指向 i 因为指针是一段4字节大小的空间,里面存放着指向的目标的地址 &的意思就是取地址 也就是取i的地址存放到p里
在定义一个 int j
j=*p 意思就是 j=i *p的意思是p 解引用的意思就是引用指针指向的内容 这里也就是i
这么说明白么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
neulinux
2011-11-24 · TA获得超过906个赞
知道小有建树答主
回答量:627
采纳率:0%
帮助的人:306万
展开全部
再地址运算中,有
*+地址==取地址的对象
&+对象==去对象的地址

这个编译器就是这么定义的,你想问题为什么一定是这两个符号吗?如果是这个我问题,我个人认为就跟英文a表示一个一样,为什么不用b呢?不过我倒是觉得@更合适替换*
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
icecoobe
2011-11-24 · TA获得超过1989个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1087万
展开全部
1. 在C语言中,所有的类型都是值类型,传参也都是值传递。不要听谭浩强书上说分什么引用类型和值类型,所有的类型都有其值!

2. 指针类型也是一个值,这个值表示一个内存地址,是一个int型数据。

3. * 和 & 都是操作符。记住,他们是操作符,操作符的定义是什么?
* 表示间接引用,& 表示取址。

假设有一个变量:
int num = 4;
获取num在内存中的地址:
&num,结果是一个16进制的int数据

可以使用指针保存这个数据,如下
int *p = #

可以使用这个指针获取该内存地址存储的值
int b = *p;

这样,两个操作符之间的互相转换的关系,明白了么?就相当于乘法和除法的互相转换!

至于他们互相补充,我想应该是值内存中地址的加减法运算!
【例子】获取下一块内存地址的值
*(p+1) <=> *( &num + 1 * sizeof(int) ) 很明显使用指针写的代码少多了,方便多了!注意,此处获得的地址可能是非法的,但是可以此处忽略,不是我们讨论的重点!
追问
是我没把问题说清楚 我用的是清华大学出版社的C how to program
课本中对指针讲得很不详细
这样一段程序
int a=1;
int *aPrt=&a;
printf("%p\n%p",&*aPrt,*&aPrt)
书上说输出的两行结果是一样的都是aPrt的值即a的地址 我就看不懂了 假设定义aPrt时它被分配给了3000H这个位置,a被分配给了2000H这个位置 那么*&aPrt=*(&aPrt)=*(3000H)=2000H=aPrt 可是&*aPrt=&(1),1是一个数字&如何对其操作呢?
追答
额。。。
&*aPrt = &(*aPrt) = &(a)而不是&(1)! &(a)和&(1)是两回事。这里不是简单的公式替换,你此处的1是哪来的,就是存储a的那块内存取得的,这个1是有地址的。。。。

对比下:#define a 1 此处的1是常量
此时,你再试试cout<<&a<<endl; 看看值是多少

等我周一直接给你解释上面程序的汇编代码吧~~~感觉自己没有描述到点子上,你还会有疑惑的!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李唐泥鳅短视频
2011-11-24 · TA获得超过1.6万个赞
知道大有可为答主
回答量:1.9万
采纳率:47%
帮助的人:8127万
展开全部
因为定义了指针变量*p后,p后就代表所指变量的地址,要把变量的地址赋值给p 就要用到&符号
定义了这许多之后,*p代表的就是地址的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式