c++ - 函数的指针参数

标签 c++ pointers

<分区>

我无法理解的一件事是何时使用某些类型的指针作为函数中的参数。

考虑一个函数,该函数接收一个整数作为其参数,并将该值加倍。一个函数可以是:

void doubleTheValue(int *myNum)
{
    *myNum *= 2;
}

int main()
{
    int number = 2;

    doubleTheValue(&number);

    // prints 4
    cout << number << endl;

    return 0;
}

这对我来说很有意义。该函数接收一个整数指针,您传入对变量“number”的引用,它会更改值。现在,让我感到困惑的是,如果您改为这样做:

void doubleTheValue(int &myNum)
{
    myNum *= 2;
}

int main()
{
    int number = 2;

    doubleTheValue(number);

    // this also prints 4
    cout << number << endl;

    return 0;
}

请注意函数的参数不同。这到底在内部做什么,为什么要在上述方法上使用它?

最佳答案

What exactly is this doing internally, and why would you use it over the aforementioned method?

在你的第一个例子中:

void doubleTheValue(int *myNum)
{
    *myNum *= 2;
}

你正在传递一个指向函数的指针。指针具有实现定义的大小。例如,在 64 位架构中,指针的大小可能 为 8 字节。在这种情况下(一般来说,对于基本类型)传递指针而不是引用会适得其反(见下一段)。

在你的第二个例子中:

void doubleTheValue(int &myNum)
{
    myNum *= 2;
}

您正在传递对函数的引用。主要区别在于引用甚至根本不需要占用任何内存。 myNum 和原始变量可以在内存中共享同一个对象。

对于引用和指针之间的其他差异,我建议您查看 this question .但一般的经验法则是尽可能使用引用。您会发现在特定情况下需要使用指针(例如,当您想要接受空值时)。

关于c++ - 函数的指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622048/

相关文章:

c++ - C++ std::vector of array 的编译器错误

c++ - 二维数组元素未被正确读取

c++ - 如何在 for 循环中声明第二个迭代器?

c++ - 为什么我不能将新对象添加到我的对象指针数组中?

c - 如何正确解析文本文件?

c++ - 按列访问矩阵的指针

c++ - C++ 中的按位运算符变体

c++ - 为什么我的程序在打开 mkfifo-ed 管道时挂起?

char* 指向一个int值,如何获取int值?

c - 如何预先确定 malloc 的大小以连接字符串数组?