关于指针中“&”和“*”的问题~~

pigyming 2008-12-14 11:20:11
#include <iostream.h>
main()
{
int *apple;
int banana=5;
apple=&banana;
cout<<"apple的地址是:"<<&apple<<"\n";
cout<<"apple的内容是:"<<*apple<<"\n";
cout<<"banana的地址是:"<<&banana<<"\n";
cout<<"banana的内容是:"<<banana<<"\n";
}
我是初学者,请大家见谅!!上面是我在BORLAND C++ 5.02上编的小程序,有很多不明白的地方要请教大家:
1、这个程序的结果是
apple的地址是:0x0013ff88
apple的内容是:5
banana的地址是:0x0013ff84
banana的内容是:5
为什么我第二个输出cout<<"apple的内容是:"<<*apple<<"\n";结果是banana的值呢? *apple不是应该指的是指针apple的内容也就是banana的地址吗?

2、我最开始输的是banana=*apple,但COMPILE的时候出个警告:“possible use of 'apple' before definition.”
后来我改成apple=&banana就没事了,请问大家是怎么回事?
...全文
153 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Big鹏 2008-12-17
  • 打赏
  • 举报
回复

为什么我第二个输出cout < <"apple的内容是:" < <*apple < <"\n";结果是banana的值呢? *apple不是应该指的是指针apple的内容也就是banana的地址吗?
//*apple 取的是值!!&apple取的才是地址。
星光伴月 2008-12-17
  • 打赏
  • 举报
回复
给你解释一下你的程序好了:

#include <iostream.h>
main()
{
int *apple; //声明了一个指向int数据类型的指针变量,名字为apple
int banana=5; //声明了一个整型变量,名字为banana,内容为5
apple=&banana; //现在让指针变量的内容成为banana的地址
cout <<"apple的地址是:" <<&apple <<"\n"; //输出指针变量apple的地址
cout <<"apple的内容是:" <<*apple <<"\n"; //输出指针变量apple的内容,但是用错了,应该用<<apple,要知道*apple指的是指针变量apple所指向的整型变量(banana)的值,所以是5
cout <<"banana的地址是:" <<&banana <<"\n"; //输出整型变量banana的地址,与apple的内容相同
cout <<"banana的内容是:" <<banana <<"\n"; //输出整型变量banana的内容,是5
}
arong1234 2008-12-16
  • 打赏
  • 举报
回复
如果说声明,"int *"是个整体,而不是"*apple"是个整体
apple得类型是"int*"
[Quote=引用 6 楼 pigyming 的回复:]
也就是说“*apple”在声明的时候是一个整体,不能将“*apple”分柝成“*”和“apple”两个部份来看,是吗?
[/Quote]
arong1234 2008-12-16
  • 打赏
  • 举报
回复
没有所谓当成整体和分拆成部分得说法,分拆开来理解也不能得出你那种错误结论
*是一个操作符,apple是被操作得对象
着就和负号运算符-对整数,否定运算符对逻辑表达式一样
为什么分开理解就得到你那种结论呢?
你还是没有明白*到底是干吗的,好好看看书多思考思考,过于好问不是好事,有些事情自己不想明白是别人教不了的,书要多读几遍,一遍不明白就多一遍,书上的示例多看看。

不要沿着自己的思路走太远,书虽然不总对,但是绝大多数情况还是对的,如果你的理解和书的结果不匹配,最好还是思考一下书上是怎么得来得。
[Quote=引用 6 楼 pigyming 的回复:]
也就是说“*apple”在声明的时候是一个整体,不能将“*apple”分柝成“*”和“apple”两个部份来看,是吗?
[/Quote]
GreaterHeat 2008-12-16
  • 打赏
  • 举报
回复
int *apple; //指针无地址(无确切地址)无值.
int banana=5; //变量有确切地址,并且有值5.
apple=&banana; //指针apple将复制banana地址中存储的值5

1、这个程序的结果是
apple的地址是:0x0013ff88
apple的内容是:5
banana的地址是:0x0013ff84
banana的内容是:5


//结果当然也是首先确定banana的地址和该地址保存的值.
//然后apple就确定紧挨banana的下一地址,并将banana的值复制过来.

2、我最开始输的是banana=*apple,但COMPILE的时候出个警告:“possible use of 'apple' before definition.”
后来我改成apple=&banana就没事了,请问大家是怎么回事?
这当然不行咯.apple都没有赋值,地址也就是不确定的.编译器自然要给出一个警告提示该危险操作.
jc65494728 2008-12-16
  • 打赏
  • 举报
回复
两个*的含义是不同的
你刚开始声明 *apple apple是一个地址
而后的*apple是指向apple地址的值,这时的*与上面就不同了
apple=&banana是指向banana的地址而已
lynnwwx 2008-12-16
  • 打赏
  • 举报
回复
跟偶一样,偶也是初学的,比较晕指针变量。我的理解是
apple的内容是banana的地址
* apple是apple指向的那个变量,是banana的内容

所以0x0013ff84才是apple的内容,是吧?
长安宁 2008-12-16
  • 打赏
  • 举报
回复
你要好好地理解一下,什么叫间接取值,指针就是这样的
fidewaway 2008-12-16
  • 打赏
  • 举报
回复
学习了
dureble1 2008-12-16
  • 打赏
  • 举报
回复
up
bulltre 2008-12-16
  • 打赏
  • 举报
回复
mark
pigyming 2008-12-15
  • 打赏
  • 举报
回复
也就是说“*apple”在声明的时候是一个整体,不能将“*apple”分柝成“*”和“apple”两个部份来看,是吗?
nullah 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lann64 的回复:]
2、我最开始输的是banana=*apple,但COMPILE的时候出个警告:“possible use of 'apple' before definition.”
后来我改成apple=&banana就没事了,请问大家是怎么回事?
---------------
当然了,你只是定义了apple是一个指针,它指向哪里还没设定
banana=*apple的意思是把apple指向的内容拷贝到banana,指向的内容没设定,你就想使用,编译器给出警告了。
[/Quote]
up

大牛在此 就不用我们这些小菜来解释了 飘走了~~~~
King_Fee 2008-12-15
  • 打赏
  • 举报
回复
& --> reference
* --> dereference
lann64 2008-12-14
  • 打赏
  • 举报
回复
2、我最开始输的是banana=*apple,但COMPILE的时候出个警告:“possible use of 'apple' before definition.”
后来我改成apple=&banana就没事了,请问大家是怎么回事?
---------------
当然了,你只是定义了apple是一个指针,它指向哪里还没设定
banana=*apple的意思是把apple指向的内容拷贝到banana,指向的内容没设定,你就想使用,编译器给出警告了。
arong1234 2008-12-14
  • 打赏
  • 举报
回复
你对指针得理解是错误得,*apple不是返回apple得内容,而是返回apple内容所指向得内存得内容,也就是banana得内容
第二个问题很显然啊,你得apple根本没有指向任何内存,怎么能用*,我想还是你对*得理解出了问题才这样,你还是认为*apple返回得是指针,实际不是得
[Quote=引用楼主 pigyming 的帖子:]
#include <iostream.h>
main()
{
int *apple;
int banana=5;
apple=&banana;
cout < <"apple的地址是:" < <&apple < <"\n";
cout < <"apple的内容是:" < <*apple < <"\n";
cout < <"banana的地址是:" < <&banana < <"\n";
cout < <"banana的内容是:" < <banana < <"\n";
}
我是初学者,请大家见谅!!上面是我在BORLAND C++ 5.02上编的小程序,有很多不明白的地方要请教大家:
1、这个程序的结果是 …
[/Quote]
lann64 2008-12-14
  • 打赏
  • 举报
回复
显示apple 的内容应该用 cout <<"apple的内容是:" <<apple <<"\n";

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧