本文主要是介绍4.关于指针的两个看似简单实则意义深远的题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0.指针是无私的,它并不关系自己,只关心指向的那个变量 。
int a = 1 ;
int *p1 = &a ;
*p1 += 1;
cout<<a<<*p1<<endl;
输出结果为,a = 2,*p1 = 2;
结论:指针是无私的,它并不关心自己,只关心指向的那个变量,,说白了,,就是间接引用那个变量,指针没有值,只是地址。
对*指针的操作就是对指向变量的操作!!!
1.void main()
{int a ,b ;
int *p,*p1,*p2;
p2 = &b;
p1 = &a;
cout<<"输入两个值"<<endl;
cin>>a>>b;
if (a<b)
{
p = p1;
p1 = p2 ;
p2 = p;
}
cout<<"a = ? p1 = ? *p1 = ?"<<a<<" "<<p1<<" "<<*p1<<endl;
cout<<"b = ? p2 = ? *p2 = ?"<<b<<" "<<p2<<" "<<*p2<<endl;
}
结果:假如输入a = 1,b = 2。
输出结果为 a = 1 ,p1 = 611100 ,*p1 = 2;
b = 2 ,p2 = 610004,*p2 = 1;
{
p = p1;
p1 = p2 ;
p2 = p;
2.不改变输入的三个数(利用指针),将三个数排序,按*p1最大,*p2 ,*p3的顺序排出。。。利用指针!!!!!/
利用交换指针的指向,而不改变原来的变量值!!
int a,b,c;
int *p, *p1=&a, *p2=&b, *p3=&c;
cout<<"输入a,b,c"<<endl;
cin>>a>>b>>c;
if (*p1<*p2)//不要写成a<b,或者b<c之类的。因为后面的第二次比较第二次比较中,要求*p1是大的那个,,这时候*p1具体是a,还是b是未知的。
p = p1;
p1 = p2;
p2 = p; //交换指针的指向,不改变原来的变量值!!
}//先比较出两个之中较大的那个
if (*p1 < *p3)
{
p = p1;
p1 = p3;
p3 = p;
}//如果*p3最大,,那么执行完第二次比较之后,p3指向第一次比较后较大的那个结果。接下来的比较就应该,将p3和p2指向互换,也就是下面的比较执行
//如果,*p3比第一次比较后的*p1小,那么p2和p3比较,互换。
if (*p2 < *p3)//比较条件必须是*p2 < *p3,,因为要求是*p2是第二大的那个
{
p = p2;
p2 = p3;
p3 = p ;
}
cout<<*p1<<" "<<*p2<<" "<<*p3<<endl;
}
3.
int *p, *p1=&a, *p2=&b,
if (*p1<*p2)
{
*p = *p1;///严重注意这里!!:p并没用被初始化地址,,它的地址这时候是任意的,当你把*p1(a变量)赋给未知地址的指针时候,,这时候系统会报错!!
*p1 = *p2;
*p2 = *p;
4.
int p, *p1=&a, *p2=&b,
if (*p1<*p2)
{
p = *p1;//这时候就没错了,因为p声明的是一个变量,而不是指针!
*p1 = *p2;
*p2 =p;
5.注意;使用指针对数的排序是非常广泛的!!!!
6.输入两个数,利用指针函数对两个数进行由大到小的排序。
void swap(int *p1,int *p2)//这里的形参中,一定要加*号,用来说明函数的形参是指针变量
{
int temp;
temp = *p1;
*p1 = *p2 ;
*p2 = *p1 ;
cout<<*p1<<*p2<<endl;
}
void main()
{
cout<<"输入两个数“<<endl;
int a,b;
cin>>a>>b;
int *point = &a ,*point2 = &b;
if(a<b)
{
swap(ponit1,point2)//注意:这里不用在point2前面加*号!!,这里已经是指针变量了,,再加就错了!
cout<<a<<b<<endl;
cout<<*point1<<*point2<<endl;
}
结果:假如输入的是1和2;
那么结果为
输出a = 2,b = 1;
a = 2,b = 1
a = 2,b = 1;
可以看出,,利用指针的函数,,其值传递方式是前后一致的,函数里和主函数中一起改,因为指针引用的就是主函数的变量,是同一个变量,并不是按值传递方式。
这就叫利用指针传递方式。
这篇关于4.关于指针的两个看似简单实则意义深远的题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!