一道指针题

necomer_C 2007-02-09 02:37:15
以前看过有关指针方面的,每到做题时就头痛,下面的就不知道该怎么做。
编写函数交换两个int型指针所指向的值,调用并检验函数,输出交换后的值。
...全文
328 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengxueqingfeng 2007-02-09
  • 打赏
  • 举报
回复
int temp = *p1;//为什么不可以写成&temp = *p1??
*p1 = *p2;//一个指针可以赋值给另一个指针么?
*p2 = temp;//同问

怎么去想具体思路呢?

在这里是不能用int &temp = *p1;因为一但temp成为*p1引用,*p1 = *p2时,temp的值也会改变!那最后俩个值都变成*p2了.
不能用一个指针赋给另一个指针,应为p1,p2在这里只是局部变量,函数退出时他们就消失了.
指针只是存入了另一个变量的地址,当我们改变该指针的值得时候并不能改变它先前所指的变量.
renzaijiang 2007-02-09
  • 打赏
  • 举报
回复
纯概念
necomer_C 2007-02-09
  • 打赏
  • 举报
回复
晓得拉
littlefishli 2007-02-09
  • 打赏
  • 举报
回复
哦,对,理解错误。
FingerStyle 2007-02-09
  • 打赏
  • 举报
回复
p1指向一个地址

*p1是那个地址里的值

*p1 = *p2; 表示将p2指向的地址中的值 放到p1指向的那块内存..
necomer_C 2007-02-09
  • 打赏
  • 举报
回复
恩,这次对了
int temp = *p1;//为什么不可以写成&temp = *p1??
*p1 = *p2;//一个指针可以赋值给另一个指针么?
*p2 = temp;//同问

怎么去想具体思路呢?

watermelontx 2007-02-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void swap(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
return ;
}
int main()
{
int a = 10;
int b = 100;
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
swap(&a, &b);
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
return 0;
}
wlp555ren 2007-02-09
  • 打赏
  • 举报
回复
这个题目上面已经解答了,这里就不重复了。。
函数的两个参数应该传地址(也可以说是传指针)。。
FingerStyle 2007-02-09
  • 打赏
  • 举报
回复
我那个代码拉了&, 上面就没问题了...
FingerStyle 2007-02-09
  • 打赏
  • 举报
回复
fun(&a, &b);

necomer_C 2007-02-09
  • 打赏
  • 举报
回复
输入参数值是整数,怎么才能被调用到fun()函数中呢?
necomer_C 2007-02-09
  • 打赏
  • 举报
回复
好像有错误

// 31.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;
void fun(int *p, int *q)
{
int tmp = *p;
*p = *q;
*q = tmp;

}
int main(int argc, char* argv[])
{
int a,b;
cin>>a>>b;
fun(a,b);
cout<<a<<' '<<b<<endl;
return 0;
}

Compiling...
31.cpp
F:\test\31\31.cpp(18) : error C2664: 'fun' : cannot convert parameter 1 from 'int' to 'int *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

31.exe - 1 error(s), 0 warning(s)
FingerStyle 2007-02-09
  • 打赏
  • 举报
回复
littlefishli(凉水塞牙~) ( ) 信誉:100 Blog 2007-02-09 14:46:06 得分: 0


这不难啊。建立一个临时指针,指向A的地址,A的指针指向B的地址,B的指针指向临时指针的地址,再分别返回,不就OK了?
======================================================
潭浩强c教程里提到的典型错误....
改变地址没用, 只改变了临时指针的地址, 真正的a ,b 内存的内容未改变....
littlefishli 2007-02-09
  • 打赏
  • 举报
回复
这不难啊。建立一个临时指针,指向A的地址,A的指针指向B的地址,B的指针指向临时指针的地址,再分别返回,不就OK了?
FingerStyle 2007-02-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void swap(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
return ;
}
int main()
{
int a = 10;
int b = 100;
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
swap(a, b);
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
return 0;
}

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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