作为函数参数传递
真正的传入一个指针到函数中
间接的传入指针到函数中
p1就是指针p,而p2是一个新的指针
以下分别为指针p、p1、p2的地址:
作为变量传递
初始值:
- 直接改变变量的值
- 间接改变变量的值
这里改变的是指针p2中存储的地址的值,而不是p2中所存储地址对应内存的值
举个例子:
目的:我们想将小明称为小红
做法:
- 直接将将小明改名为小红,那么身份证上写的也是小红,但小明他还是那个小明。
- 直接找来了小红,说她是小明变的。
做法1就是直接改变变量的值,做法2就是间接改变变量的值
测试程序:
/*
* @Author: itThree
* @Date: 2021-08-27 13:59:28
* @LastEditTime: 2021-08-27 17:11:14
* @Description:
* @FilePath: \cpp\testcpp\swapWithPointers.cpp
* 光阴之逆旅,百代之过客,而已
*/
#include<stdio.h>
//传入指针p,参数int* &p解析指针地址
//就是说传入的是真正的指针p
void testp1(int* &p1){
int num1 = 2020;
//将p1地址对应内存下的值直接改变;
*p1 = num1;
printf("%d,%d,%d,%p\n",p1,*p1,num1,&p1);
}
//传入指针p,参数int* p初始化并指向传入的指针
//就是说初始化一个指针指向指针p所指向的东西
void testp2(int* p2){
int num2 = 2019;
//将p2指向num2的地址
p2 = &num2;
printf("%d,%d,%d,%p\n",p2,*p2,num2,&p2);
}
int main(){
// int x = 1;
// int y = 2;
// //传入x,y的地址,交换其值的位置
// swapWithPointers(&x,&y);
// printf("x=%d\ty=%d",x,y);
int num = 2021;
int* p = #
printf("初始值:\n");
printf("%d,%d,%d,%p\n",p,*p,num,&p);
printf("经过test1:\n");
testp1(p);
printf("经过test2:\n");
testp2(p);
//从结果可以看出test1真正的改变了num的值,而test2仅是将指针指向了另一个地址
printf("最终:\n");
printf("%d,%d,%d,%p\n",p,*p,num,&p);
return 0;
}
运行结果:
</stdio.h>