C++基础--传指针或引用修改形参值

在局部函数中对入参的值进行修改分为两种:传指针并对指针指向内容修改;传引用。如果是普通形参,其只是实参的一个拷贝,对其修改并不能改变原始实参的值。

#include 

#include 

void GetMemery(int **p)
{
    /*申请1024个int大小*/
    *p = (int*)malloc(sizeof(int)*1024);
    if(NULL == *p)
    {
        printf("malloc failed\n");
        *p = NULL;
    }
}

void changeValueViaPtr(int *val)
{
    std::cout << "SinglePtr: " << *val << std::endl; // 66
    *val = 88;
    std::cout << "SinglePtr: " << *val << std::endl; // 88
}

void changeValueViaDoublePtr(int **val)
{
    std::cout << "DoublePtr: " << **val << std::endl; // 20
    **val = 10;
    std::cout << "DoublePtr: " << **val << std::endl; // 10
}

void changeValueViaReferences(int& val)
{
    std::cout << "References: " << val << std::endl; // 30
    val = 100;
    std::cout << "References: " << val << std::endl; // 100
}


int main(void)
{
    int *p = NULL;
    GetMemery(&p);
    printf("address of p is %p\n",p);
    free(p);
    p = NULL;

    int valSinglePtr = 66;
    changeValueViaPtr(&valSinglePtr);
    std::cout << "SinglePtr: " << valSinglePtr << std::endl; // 88

    int val = 20;
    int* valPtr = &val;
    changeValueViaDoublePtr(&valPtr);
    std::cout << "DoublePtr: " << val << std::endl; // 10

    int valRef = 30;
    changeValueViaReferences(valRef);
    std::cout << "References: " << valRef << std::endl; // 100

    return 0;
}

你可能感兴趣的:(C++学习,c++)