为什么有时候C++传了指针,值没有改变呢?
那可能是你看错了!!!
文章部分参考:①https://blog.csdn.net/weixin_56204139/article/details/118277728
以交换函数为例:
交换了
(1)二级指针
void swap(int **a,int **b)
{
int **t;
*t=*a;
*a=*b;
*b=*t;
}
int main(){
int i=3,j=5,*p=&i,*q=&j;
swap(*&p,*&q);//交换p,q存的地址(交换指向p和q的指针);i,j没有交换
printf("%d %d\n",*p,*q);}
(2)一级指针
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
void swap(int *a,int *b)
{
int *t;
t=a;
a=b;
b=t;
}
int main(){
int i=3,j=5,*p=&i,*q=&j;
printf("%d %d %d\n",p,&p,&i);
printf("%d %d %d\n",q,&q,&j);
printf("%d %d %d %d\n",*p,*q,i,j);
swap(*p,*q);//p,q的值交换,i,j的值交换;因为把p,q两个指针进行了交换,而p,q分别指向变量i,j
printf("%d %d %d\n",p,&p,&i);
printf("%d %d %d %d\n",*p,*q,i,j);
}
没交换
(1)
#include <stdio.h>
void swap(int *p1,int *p2) //pi和p2改成了指针变量
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a;
int b;
printf("输入两个数字:\n");
scanf("%d%d",&a,&b);
swap(&a,&b); //将a和b的地址传递给函数 ,相当于将常量进行了传递
printf("a=%d,b=%d\n",a,b);return 0;
}
(2)
void swap(int *a,int *b)
{
int *t;
t=a;
a=b;
b=t;
}
int main(){
int i=3,j=5,*p=&i,*q=&j;
printf("%d %d %d\n",p,&p,&i);
printf("%d %d %d\n",q,&q,&j);
printf("%d %d %d %d\n",*p,*q,i,j);
swap(p,q);//p,q里面分别存的是i,j的地址,也相当于进行了常量传递
printf("%d %d %d\n",p,&p,&i);
printf("%d %d %d %d\n",*p,*q,i,j);
}
总结:
1.要判断传入的值是否会被改变,直接看函数调入点传的是常量(指针的地址)还是指针,只有传入的是指针,相应的值才能被改变。
2. *&p 是指向p的地址的指针,*p是指针p