关于指针作为函数参数;一级、二级指针、指针引用——编程小总结(四)

一、指针作为参数

C++ 中,指针作为函数参数传递时,指针本身也会被复制一份。
这意味着,函数内部的指针和函数外部的指针是两个不同的指针变量,它们指向的是同一块内存空间。

以下是一个示例代码:

void func(int* p) {
    *p = 10;
}

int main() {
    int a = 0;
    int* p = &a;
    func(p); // 将指针 p 作为参数传递给函数 func
    cout << a << endl; // 输出 10
    return 0;
}

在这个示例中,函数func接受一个指针参数 p。在 main 函数中,定义了一个int类型的变量 a,并将其地址赋值给指针 p。然后,将指针p作为参数传递给函数 func。在函数func内部,修改了指针p所指向的内存空间的值为 10。在 main 函数中,输出变量 a 的值,可以看到它的值已经被修改为 10

需要注意的是,如果在函数内部修改了指针 p 的值,例如将其指向另一个内存空间,那么这个修改不会影响到函数外部的指针因为函数内部的指针和函数外部的指针是两个不同的指针变量

二、一级指针和二级指针

C++ 中,指针是一种非常重要的数据类型,它可以用于许多不同的场景。一级指针和二级指针都是指针类型,它们可以用于不同的场景,具有不同的妙用。

一级指针是指向变量的指针,也称为普通指针。
它可以用于访问和修改指向的变量,也可以用于动态内存分配和释放。

一级指针的妙用包括
1. 动态内存分配和释放: 使用 newdelete 运算符可以在堆上分配和释放内存空间。
2. 函数参数传递: 可以将指针作为函数参数传递,用于在函数内部修改指向的变量。
3. 数组访问: 可以使用指针访问数组元素,也可以使用指针动态分配数组。

二级指针是指向指针的指针,也称为指针的指针。
它可以用于访问和修改指向的指针,也可以用于动态分配和释放指针数组。

二级指针的妙用包括:
1. 动态分配和释放指针数组: 可以使用 new 运算符动态分配指针数组,使用 delete 运算符释放指针数组 。
2. 函数参数传递: 可以将指针的指针作为函数参数传递,用于在函数内部修改指向的指针。
3. 多级指针: 可以使用多级指针来访问多维数组或多级数据结构。

总的来说,一级指针和二级指针都是非常重要的指针类型,在不同的场景下具有不同的妙用。掌握它们的使用方法可以使程序更加灵活和高效。

三、C++中如何改变传入函数中的指针参数?

C++ 中,可以通过指针来访问和修改指向的变量。如果需要在函数中修改传入的指针参数,可以使用指针的引用或者二级指针。
1. 使用指针的引用: 可以参考之前的博客 左值引用和右值引用
可以将指针作为参数传递给函数,并使用指针的引用来访问和修改指向的变量。这样可以直接修改传入的指针参数,而不是复制一份指针。

例如,以下代码演示了如何使用指针的引用来修改传入的指针参数:

void func(int*& p) {
    p = new int(10);
}

int main() {
    int* p = nullptr;
    func(p); // 将指针 p 作为参数传递给函数 func
    cout << *p << endl; // 输出 10
    delete p;
    return 0;
}

在这个示例中,函数func接受一个指针参数p的引用。在 main 函数中,定义了一个指针 p,并将其传递给函数 func。在函数 func 内部,修改了指针p 所指向的内存空间的值为 10。在main 函数中,输出指针 p 所指向的变量的值,可以看到它的值已经被修改为 10

2. 使用二级指针:
可以将指针的指针作为参数传递给函数,并使用二级指针来访问和修改指向的指针。这样可以直接修改传入的指针参数,而不是复制一份指针。

例如,以下代码演示了如何使用二级指针来修改传入的指针参数:

void func(int** pp) {
    *pp = new int(10);
}
int main() {
    int* p = nullptr;
    func(&p); // 将指针 p 的地址作为参数传递给函数 func
    cout << *p << endl; // 输出 10
    delete p;
    return 0;
}

在这个示例中,函数 func 接受一个指针的指针参数 pp。在 main 函数中,定义了一个指针 p,并将其地址传递给函数func。在函数 func 内部,修改了指针 p 所指向的内存空间的值为 10。在 main 函数中,输出指针 p 所指向的变量的值,可以看到它的值已经被修改为 10

需要注意的是,在使用二级指针时,需要传递指针的地址作为参数。这样在函数内部才能修改传入的指针参数。

你可能感兴趣的:(C++,编程小技巧,c++,开发语言)