c指针的传递

作为函数参数传递

真正的传入一个指针到函数中

c指针的传递_测试程序

间接的传入指针到函数中

c指针的传递_参数传递_02

p1就是指针p,而p2是一个新的指针

以下分别为指针p、p1、p2的地址:

c指针的传递_初始化_03

作为变量传递

初始值:c指针的传递_初始化_04

  1. 直接改变变量的值

c指针的传递_技术_05

  1. 间接改变变量的值

这里改变的是指针p2中存储的地址的值,而不是p2中所存储地址对应内存的值

举个例子:

目的:我们想将小明称为小红

做法:

  1. 直接将将小明改名为小红,那么身份证上写的也是小红,但小明他还是那个小明。
  2. 直接找来了小红,说她是小明变的。

做法1就是直接改变变量的值,做法2就是间接改变变量的值

c指针的传递_技术_06

测试程序:

/*
 * @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;
}

运行结果:

c指针的传递_参数传递_07
</stdio.h>