永发信息网

C语言这样不能达到交换指针指向地址交换输出吗?为什么?求大神赐教

答案:2  悬赏:10  手机版
解决时间 2021-11-25 19:20
C语言这样不能达到交换指针指向地址交换输出吗?为什么?求大神赐教
最佳答案
函数调用的时候,形参是实参的副本。
所以你在这里交换的指针值只是实参的副本,原来的指针值并没有改变
看你函数的功能可以采用二级指针来完成

int main()
{
   ...
   swap(&p1,&p2);
   ...
}
void swap(char **p1,char **p2)
{
    char *tmp;
    tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
}追问我只是想交换指针指向对象,就相当于换顺序输出

大概就是这个意思p1,p2指向对象改变后输出,能告诉我错哪了吗?求赐教

追答首先说一下什么是指针,指针是一种数据类型。指针有自己的所占的空间,这点跟地址的区别搞清楚。


现在的这段代码是没有问题的:
int *p1, *p2, *tmp;//这里的p1,p2,tmp在win32系统中都是有自己的所占的4字节内存的
int a = 1, b = 2;// a,b也各占有4字节(int长度)内存,分别存放 1,2
p1 = &a;//p1占用的内存存放a的地址,打比方是00420000
p2 = &b;//p2占用的内存存放b的地址,打比方是0041fffc
tmp = p1;// tmp 等于p1中数据,就是00420000
p1 = p2; //p1中存的就是0041fffc
p2 = tmp; //p2中存的就是00420000
printf("%d,%d",*p1,*p2);//现在再看p1,p2中的内容已经改变了,因为里面存的地址改变了

----------------------上次代码讲解--------------------------------------------
函数调用的时候,形参只是实参的副本(如果不理解形参,实参可以去看谭浩强的书)
int *p1, *p2, *tmp;
int a = 1, b = 2;
swap(p1,p2);//在这里p1和p2是实参,进入swap后里面操作的p1,p2只是这里p1,p2的副本
printf("%d,%d",*p1,*p2);//p1,p2里的数据没有变,变的只是p1和p2的副本

void swap(p1,p2)
{
    tmp = p1;//这里p1,p2都是形参,他们也有自己的四字节内存,跟main的p1,p2的内存不是一回事了
    p1 = p2; //这里操作的p1 p2都是新的内存,不会影响到main中的p1,p2
    p2 = tmp;//所以说你在main中printf的时候p1 p2并没有交换
}
全部回答
要交换指针,要用指针的指针呀。
void swap(char **p1, char **p2)
{
char *temp;
temp = *p2;
*p2 = *p1;
*p1 = temp;
}
main里面调用swap的地方改成
swap(&p1, &p2);追问

我想问的是就像上面的简单交换一样,交换p1,p2指针指向的对象后输出,请问我原来的方程为什么不能实现,求赐教

追答看这几个对比一下就明白了
// 这是要交换int, 所以要传int*
void swap_int(int *p1, int *p2){ int temp;
temp = *p2; *p2 = *p1; *p1 = temp;}
// 这传的是char*, 所以可以交换char
void swap_char(char *p1, char *p2){ char temp;
temp = *p2; *p2 = *p1; *p1 = temp;}
//要交换字符串(一般认为字符串是char*),所以要传char **
void swap_str(char **p1, char **p2)
{ char* temp;
temp = *p2; *p2 = *p1; *p1 = temp;}追问谢谢你的答案 ,我对指针的理解更进一步了。。。多谢,多谢,大神
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问湖北290分能上什么专校?
李鑫铸这个名字好吗
狗嘴里的骨头,没多大油水,油水不大是什么意
贵阳红8夜总会怎么样
石家庄北站的日升热力公司,暖气整个冬天都不
丹东华晨阳光汽车贸易有限公司地址在什么地方
英语数词练习三
那首歌的歌词有个高潮部分听起来在念“此天花
形容堆积高的成语我记得是 什么
百度有一个网址叫“mamashuo......”求全名
辣椒末得淹多长时间能吃.
锦绣未央李未央父亲李潇然怎么惨死的 李潇然
玲珑废品回收站地址好找么,我有些事要过去,
遗嘱怎么写?怎么才生效?
大原娜娜子的角色关系
推荐资讯
绘画育儿之如何做有效的亲子陪伴
炭火烤锡纸五花肉是生烤还是熟烤
你好,有人认识在上海斯凯奇上班的瞿颖吗?能
百度员工这样上班,穿着合适吗?
外地户口在西安申请廉租房需要什么条件?
日语经典短句
短文有几句话怎么分 说话内容 一句话
张明爸爸骑自行车每分钟大约行200米,如果他每
诗歌今天是你的生日,恩主耶稣词谱
轴承nsk 6204dd和nsk 6204zz有什么区别
想问问中国当今的社会现状,各个方面的.
把句子写具体 ——————的事情发生了——
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?