通过形参指针变量改变实参指针变量
哪位高手可以通过形参指针变量去改变实参指针变量的值?简单说下程序功能:输入两个数,之后按大小顺序输出。现在程序不能实现功能,原因是形参指针不能改变实参指针。请看程序如下:...
哪位高手可以通过形参指针变量去改变实参指针变量的值?
简单说下程序功能:输入两个数,之后按大小顺序输出。
现在程序不能实现功能, 原因是形参指针不能改变实参指针。
请看程序如下:
#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的值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
没有那么简单啦 展开
简单说下程序功能:输入两个数,之后按大小顺序输出。
现在程序不能实现功能, 原因是形参指针不能改变实参指针。
请看程序如下:
#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的值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
没有那么简单啦 展开
5个回答
展开全部
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);
}
{
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);
}
展开全部
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;
}
{
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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指针指向的地址没有变化, 指向地址的变量没有变化,也就是没有达到交换的目的.
不知道给你解释这么多理解了没有?
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指针指向的地址没有变化, 指向地址的变量没有变化,也就是没有达到交换的目的.
不知道给你解释这么多理解了没有?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询