关于C语言指针问题!

main(){inta=123;int*p1=123,*p2;p2=&a;printf("%d,%d",p1,*p2);为什么输出的结果一样啊!p1不是表示地址吗?... main()
{ int a=123;
int *p1=123,*p2;
p2=&a;
printf("%d,%d",p1,*p2);

为什么输出的结果一样啊!p1不是表示地址吗?
展开
 我来答
xiziufo
2012-07-25 · TA获得超过132个赞
知道小有建树答主
回答量:103
采纳率:100%
帮助的人:80万
展开全部
我给楼主一个解释,希望对楼主有帮助。有不懂的可以继续追问哦
首先得从你的定义开始
楼主要区别
int *p=123;和int *p;*p=123;
前者是定义一个指针变量,它指向一个地址123,后者是定义一个指针变量,再在这个指针指向的地址里赋予123这个值。
所以两个123是不同含义的。一个代表地址,一个代表数值。
所以最好输出的时候,是把p1指向的地址和p2指向的地址的值输出来了。
飞翔的蝎子大叔
2020-05-16
知道答主
回答量:2
采纳率:0%
帮助的人:1753
展开全部
关于int *p1=123这个问题我看了很多资料,在这里我发表一点看法,该问题非常好,这是C语言需要规范的地方。int *p1=123 是非法操作,指针表示地址,地址=123???我是没有见过这种操作。地址一般用二进制、八进制、十六进制表示,123表示地址根本就是扯淡!
这个语句的目的就是给指针赋值,正确的方式应该为:
int a=123, *p1;

p1=&a;

运行一下就明白了:
#include<stdio.h>
void main()
{
int a = 123, *p1;
p1 = &a;
printf("%d", p1);
printf("\n%d", *p1);
getchar();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yehuaw
2012-07-25 · TA获得超过355个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:203万
展开全部
是啊 p1是地址,但是你在声明的时候:
int *p1=123//这里其实等价于:int *p1; p1=123;
明白了否
更多追问追答
追问
那*p1=123,表示什么?
追答
额 我不是写了等价于吗。
那个你是问*p1=123;吧,而不是问int *p1=123;的吧。
*p1=123;是指把p1里的那个地址上的数据改成了123,p1的值没有变得哦。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我有两把刷子谁要
2012-07-25 · TA获得超过1010个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:152万
展开全部
*p1 = 123 表示把123当做地址赋给了指针变量,故所得的值一样
追问
照你这么说 p1= p1*.
追答
我觉得不能这么说,因为你只是把指针指向了一个地址,并没有为这个地址赋值,程序是没办法执行的。一般采用 int *p1 = &a;这种形式对指针变量进行指向。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mia☆jiancha☆ce6608
2012-07-25 · TA获得超过1526个赞
知道小有建树答主
回答量:713
采纳率:100%
帮助的人:491万
展开全部
p1是指针没错,但是地址也是一个值 ,你把它%d整型输出,所以输出123
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式