函数中,指针的传递和变量的传递

关于函数数的参数传递,变量以及指针,容易混淆
下面通过代码来进行了解学习。

#include<stdio.h>
#include<Windows.h>

void Clm(int &d, int *&p)
{
    printf("Clm(int &d, int *&p),int &d表示传入d的值,int *&p传入的是p的值也就是a的地址");
    printf("传出d传进的值:%d\n", d);
    d = 888;
    printf("传出d修改的值:%d\n\n", d);

    printf("&p  传出p的自身地址:\t\t\t%d\n", &p);
    printf("*&p 传出p的自身值(p中存储的为a的地址):%d\n", *&p);
    printf("p   传出赋值后p的地址(即是a的地址):\t%d\n", p);
    printf("*p  传出p的值(即是a的值):\t\t%d\n", *p);
    printf("&*p 传出p的值的地址:\t\t\t%d\n", &*p);

}

int main()
{
    int a, d;
    a = 999;
    d = 0;
    int *p=0;
    printf("p   未赋值前p的值:%d\n", p);
    printf("&p  未赋值前p的地址:%d\n", &p);
    printf("*&p 未赋值前指向p的地址的值:%d\n\n", *&p);

    p = &a;//将a的地址赋给p

    printf("&a  传出a的地址:%d\n", &a);
    printf("a   传出a的值:%d\n\n", a);
    printf("可以理解为p将地址实体化,p就是a的地址值\n\n");
    printf("p   赋值后传出p的值(此时为a的地址值):%d\n", p);
    printf("*p  赋值后传出指向p存储的地址值的值(此时为a的值):%d\n", *p);
    printf("&p  传出p身的地址:%d\n\n", &p);

    printf("-------------进入函数----------\n");
    Clm(d, p);
    printf("--------------出函数-----------\n");

    printf("\nd传出d修改的值:%d\n\n", d);

    system("Pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/littlebeeee/article/details/81745659