关于c++指针的问题

我在学习指针的过程中遇到这个情况:#include<iostream>usingnamespacestd;intmain(){inta=3;int*p=&a;}可以编译通... 我在学习指针的过程中遇到这个情况:
#include <iostream>
using namespace std;
int main()
{
int a=3;
int *p=&a;
}可以编译通过,但是把int *p=&a;换成int *p;*p=&a;就出错了,这是为什么?
另外就int *p=&a而言,&a返回的不是a的地址吗,那*p不就等于a的地址了?指针变量p保存的又是谁的地址呢?经测试,int *p=&a;和int *p;p=&a;是等效的.
展开
 我来答
有钱买不起房子
2011-07-22 · TA获得超过4324个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2017万
展开全部
int *p=&a;
这种方式是定义一个指针变量,并同时初始化
而int *p;p=&a;是2条语句,定义一个指针变量p,在让p指向a的地址
指针的数值是存储其他变量地址,*是间接获取数值的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-22
展开全部
同学,定义语句中int *p=&a; 这儿p前面的“*”是说明p是指针的一个标志,存放a地址的是指针变量p,而不是*p,*p是地址里存放的值,也就是变量a的值,是3。
int *p=&a;和int *p;p=&a; 当然是等价的,记住定义时指针变量前的“*”是指针的标志,而指针变量只是p。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松甜恬0Je4ba
2011-07-22 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3049万
展开全部
int *p; 是声明一个指向整型的指针,此时*是类型声明符的一部分,也就是 int * 指明了p的类型。

*p;这种形式,代表了其指向地址上存储的值,例如 int *p = &a; 则 *p与a是等价的,此时*是作为地址解除符使用的。
p是指向地址的,也就是与&a等价。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xianghengwwy
2011-07-22 · TA获得超过285个赞
知道答主
回答量:46
采纳率:100%
帮助的人:15.5万
展开全部
说实话,这内容我忘了。为了回答楼主。我看了下书,总算回忆起来了。
看下面的语句:
int* iPtr;
int iCount = 18;
iPtr = &iCount;

这里涉及到一个类型匹配的问题。
iPtr实际是一个地址值。将地址值赋给地址变量肯定没问题。
*这个符号有间接引用的意思。就是指向这个地址所指向的变量,这变量可能是任何类型。如果第三句是: *iPtr = &iCount; 的话,就是把一个地址赋给一个未知类型的变量。所以会出错。
差不多就这样吧,我也是半桶水,欢迎楼主与我一起探讨。
更多追问追答
追问
真是麻烦你了,呵呵.
"把一个地址赋给一个未知类型的变量"—*iPtr不是已经知道是int型的了吗?地址也是int型的吧,那是不是说可以赋值呢?
追答
呵呵,像: iPtr = &iCount; 这句话。iPtr是int型指针变量,&iCount是取iCount的地址,iCount是int型,当然没问题。但是像:*iPtr = &iCount; 这句话。*iPtr,是引用iPtr指向的int型的变量(如果在这句话前有个语句:iPtr=17;的话,*Ptr代表的就是17,将地址赋给一个已经存在的数,实在不可思议),而不是地址类型。这话和我上个回答有点矛盾,“如果第三句是: *iPtr = &iCount;   的话,就是把一个地址赋给一个未知类型的变量。”,先前我没有注意到iPtr已经是一个整型指针,所以应该改为“如果第三句是: *iPtr = &iCount;   的话,就是把一个地址类型赋给一个整型类型。”。这么说楼主也明白了么?道理越讲越明白,我貌似更清楚了。楼主提的问题真不错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叫撒名字啊啊啊
2011-07-22 · TA获得超过119个赞
知道答主
回答量:61
采纳率:0%
帮助的人:81.3万
展开全部
朋友,错误的原因是这样的。
首先,*p是一值,&a是一个地址;
在你定义指针的时候,int *p就是一个指针,他是指向某一单元的指针,所以你可以吧&a赋值给他并且不报错,但是你如果先定义int *p。然后在用*p=&a,那就肯定是错误的了。原因是你企图用一个地址给一个值赋值。
error C2440: '=' : cannot convert from 'int *' to 'int'
这是运行错误的提示,你用一个int*企图给一个int变量赋值,所以是错误的。
更多追问追答
追问
应该是"企图用一个int变量给一个int *赋值",因为错误提示是:不能实现从int *到int的转变.所以改变的是int *.另外,int *是什么意思?
追答
恩。。初学编程语言一定要学会看错误提示,很重要,有助于帮助你修改程序。
int*的意思就是int型指针变量。
意思就是你企图用一个整形变量给一个整形指针变量赋值,当然会报错了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式