c指针的传递

c指针的传递

作为函数参数传递

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

image-20210827171357110

间接的传入指针到函数中

image-20210827171451818

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

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

image-20210827171611554

作为变量传递

初始值:image-20210828171332886

  1. 直接改变变量的值

image-20210827172216274

  1. 间接改变变量的值

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

image-20210827172151988

测试程序:

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

运行结果:

image-20210827172030142
</stdio.h>

posted @ 2021-08-27 17:36  main(void)  阅读(193)  评论(0编辑  收藏  举报
.c_ad_block { display: none !important; } #ad_t2{ display: none !important; }