关于c语言指针问题

#include<stdio.h>voidswap(int*p1,int*p2){intt;t=*p1;*p1=*p2;*p2=t;}voidmain(){inta,b,... #include<stdio.h>
void swap(int * p1,int * p2)
{ int t;
t=*p1;*p1=*p2;*p2=t;
}
void main()
{ int a,b,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a; p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d,*p2=%d",*p1,*p2);
}
将swap中的中的换成以下
void swap(int * p1,int * p2)
{ int * t;
t=p1;p1=p2;p2=t;
}
值就不能交换了,请问是为什么呢
指针t不是指向p1 p1指向p2 p2指向了t所指的吗
应该可以交换的吧
展开
 我来答
百度网友8fb75cd
2019-06-24 · TA获得超过152个赞
知道小有建树答主
回答量:131
采纳率:35%
帮助的人:63万
展开全部
t=p1 相当于t指向了p1所指向的地址,而不是指向p1,也就是说这个时候你的t指向了a;
同理p1 = p2,说明p1指向了b;
同理p2 = t,说明p2指向了a;
但是并没有改变a,b所在地址的内容,只是交换了指向a,b的指针
更多追问追答
追问
请问是不是由于单向值传递的原因,swap完成之后,就释放内存,就对main没有影响了吧?所以p1和p2分别所指的还是以前的a和b,所以输出的*p1和*p2分别还是a和b的值
追答
是的
毓莲芙5125
2019-06-24 · TA获得超过4991个赞
知道大有可为答主
回答量:5993
采纳率:88%
帮助的人:286万
展开全部
已知:char c[8] = "beijing", *s = c; int i; 则下面的输出语句中,错误的是 _____。选择一项:A. printf("%s\n", s);B. for (i = 0; i < 7; i++) printf("%c", s[i]);C. printf("%s\n", *s); //s是指向字符串的指针,而*s则为s指向的第一个字符,而与*s配合的输出格式是%s,显然配合失当,就是说,C是错误的。D. for (i = 0; i < 7; i++) printf("%c", c[i]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2019-06-24 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:787万
展开全部
你这个没有操作指针指向的变量
更多追问追答
追问
请问但是t=p1不就是指向了p1指向的地址,p1=p2就是p1指向p2所在的地址,p2=t不就是p2指向t所在的地址,也就是之前的p1吗
追答
是你说的这样  但这并没有改变什么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
娱乐文风
2020-04-25 · 贡献了超过121个回答
知道答主
回答量:121
采纳率:100%
帮助的人:5.7万
展开全部

30分钟彻底学会C语言指针

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祈光怀冷菱
2020-06-09 · TA获得超过3777个赞
知道大有可为答主
回答量:3140
采纳率:28%
帮助的人:231万
展开全部
#include
<stdio.h>
int
main()
{
int
a[5]
=
{1,2,3,4,5};
int
*ptr
=
(int*)(&a+1);//定义ptr指针并且把a[]数组后面的地址给他的地址给它
printf("%d
%d"
,
*(a+1),
*(ptr-1)
);//*(a+1)就是a[1];*(ptr
-
1)表示数组最后一个元素
return
0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式