通过形参指针变量改变实参指针变量

哪位高手可以通过形参指针变量去改变实参指针变量的值?简单说下程序功能:输入两个数,之后按大小顺序输出。现在程序不能实现功能,原因是形参指针不能改变实参指针。请看程序如下:... 哪位高手可以通过形参指针变量去改变实参指针变量的值?

简单说下程序功能:输入两个数,之后按大小顺序输出。
现在程序不能实现功能, 原因是形参指针不能改变实参指针。

请看程序如下:

#include <iostream>
using namespace std;
int main()
{
void swap(int *p1,int *p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b)swap(pointer_1,pointer_2);
cout<<"max="<<a<<"min="<<b<<endl;
return 0;
}

void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

相当于通过形参指针p1,p2去改变实参指针pointer_1,pointer_2的值。
也就是说最后能输出大数在前 小数在后就成功了。
请高手出谋划策!答对有奖。小弟在此谢过了!
不是这样的,你们只是通过形参指针改变了原来变量a,b的值!
看清楚题目啊 大哥们
我想通过形参指针p1,p2去改变实参指针pointer_1,pointer_2的值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
没有那么简单啦
展开
 我来答
游牧铲
推荐于2016-06-23 · TA获得超过1268个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:447万
展开全部
void swap(int &p1,int &p2)
{
int ×temp;
temp=p1;
p1=p2;
p2=temp;
}

可以了
用指针形式不就可以了吗...
算了...貌似上面那个比我还快那么一点点

#include <iostream>
using namespace std;

const char* input="%x\n";

int main()
{
void swap(int **p1,int **p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b)swap(&pointer_1,&pointer_2);
cout<<"max="<<*pointer_1<<" min="<<*pointer_2<<endl;
return 0;
}

void swap(int **p1,int **p2)
{
int *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

或者
void swap(int **p1,int **p2)
{
__asm(
"movl (%0),%%eax\n"
"movl (%1),%%edx\n"
"movl %%edx,(%0)\n"
"movl %%eax,(%1)\n":"+b"(p1),"+c"(p2));
}
也可以
再给几个版本
void swap(int **p1,int **p2)
{
*p1=(int*)((int)*p1^(int)*p2);
*p2=(int*)((int)*p1^(int)*p2);
*p1=(int*)((int)*p1^(int)*p2);
}

void swap(int **p1,int **p2)
{
*p1=(int*)((int)*p1+(int)*p2);
*p2=(int*)((int)*p1-(int)*p2);
*p1=(int*)((int)*p1-(int)*p2);
}
Gnu_IsNot_Unix
2010-08-09 · TA获得超过381个赞
知道答主
回答量:52
采纳率:100%
帮助的人:46万
展开全部
void swap(int*& p1,int*&p2)//这里编程指针的引用就好了
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

cout<<"max="<<*pointer_1<<"min="<<*pointer_2<<endl;
//我想这才是楼主真正想输出地东西吧?

void swap(int** p1,int**p2)
{//也可以传入指针的指针
int *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

这样就能通过解引用修改pointer_1,pointer_2了。
但要注意调用的时候就变成了
if(a<b)swap(&pointer_1,&pointer_2);
//第一种实现
#include <iostream>
#include<cstdlib>
using namespace std;

void swap(int*& p1,int*&p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

int main()
{
//void swap(int& *p1,int& *p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b)swap(pointer_1,pointer_2);
cout<<"max="<<*pointer_1<<"min="<<*pointer_2<<endl;
system("pause");
return 0;
}

//第二种实现

#include <iostream>
#include<cstdlib>
using namespace std;

void swap(int** p1,int**p2)
{
int *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

int main()
{
//void swap(int& *p1,int& *p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b)swap(&pointer_1,&pointer_2);
cout<<"max="<<*pointer_1<<"min="<<*pointer_2<<endl;
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wbchn
2010-08-09 · TA获得超过338个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:205万
展开全部
swap函数修改成:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}

补充:
swap(pointer_1,pointer_2);
时编译器重新生成了2个临时变量:
swap(_pointer_1,_pointer_2);
其中,*_pointer_1 = pointer_1,*_pointer_2 = pointer_2
你要交换的是值,即交换的是,*_pointer_1 和*_pointer_2,因此上面的修改没有错误.

你原来的代码进行时:
假设,_pointer_1 地址为0x4444 _pointer_2地址为0x3333
交换后_pointer_2地址为0x4444, _pointer_1地址为0x3333,而pointer_1,pointer_2指针指向的地址没有变化, 指向地址的变量没有变化,也就是没有达到交换的目的.

不知道给你解释这么多理解了没有?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
恐怖的肖恩
2016-02-12 · TA获得超过2452个赞
知道大有可为答主
回答量:2413
采纳率:38%
帮助的人:546万
展开全部
UserService us = SpringContextUtils.getBean("userServiceImpl");
 
UserServiceImpl中的DAO是自动注入的。
 
而不用是 UserService us = new UserServiceImpl();
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
 
@Service
public class SpringContextUtils implements ApplicationContextAware {
 
    private static ApplicationContext applicationContext;
 
        @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }
 
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
 
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) throws BeansException {
        if (applicationContext == null){
                    return null;
                }
        return (T)applicationContext.getBean(name); 
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6c5eac102
2010-08-08 · TA获得超过1101个赞
知道小有建树答主
回答量:464
采纳率:0%
帮助的人:584万
展开全部
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式