为什么有时候C++传了指针,值没有改变呢?

那可能是你看错了!!!

 

文章部分参考:①https://blog.csdn.net/weixin_56204139/article/details/118277728 

https://blog.csdn.net/weixin_30326515/article/details/97361987?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-97361987-blog-116211675.pc_relevant_multi_platform_featuressortv2dupreplace&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-97361987-blog-116211675.pc_relevant_multi_platform_featuressortv2dupreplace&utm_relevant_index=1

个人理解如果有误,欢迎大家指正奥

以交换函数为例:

 

交换了

(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);       //ab的地址传递给函数 ,相当于将常量进行了传递

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

全部评论
之前不是很理解,瞬间秒懂
点赞 回复 分享
发布于 2022-08-26 20:41 陕西

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务