C ++指南:了解指针的工作原理

时间:2014-05-07 17:47:40

标签: c++ pointers

我在互联网上找到了一个代码段。当我编译并运行它时,输出为70.但我不知道代码中发生了什么。请帮帮我。

#include <iostream>
using namespace std;  

void doubleNumber (int *num ) 
{
    *num = *num * 2;
} 
int main () 
{ 
    int num = 35;
    doubleNumber (&num) ; 
    cout <<num ;  
    return 0; 
}

4 个答案:

答案 0 :(得分:2)

void doubleNumber (int *num )将一个指向整数的指针作为参数,允许该方法修改原始变量。

调用*num取消引用指针,而*num = *num * 2将指针num的变量值乘以2,将num指向的内存单元格。 / p>

在主要的,声明整数的地方,通过调用带有&amp; num的函数doubleNumber,引用变量,返回值是指向变量的指针。

int num = 35;
doubleNumber(&num); 

相当于:

int num = 35;
int* num_pointer = &num;
doubleNumber(num_pointer); 

您应该查看at this site以了解有关引用和解除引用的信息。

答案 1 :(得分:1)

在main函数中,调用doubleNumber()将指针传递给num。 doubleNumber()函数接收指针并将其值加倍。

*num = *num * 2

答案 2 :(得分:0)

代码定义了一个&#34;加倍&#34;一个数字。主程序将指向变量num的指针传递给函数,函数使用传入的指针将变量加倍。

答案 3 :(得分:0)

C ++中的指针是我最喜欢的(并且 - 对于新的程序员 - 通常会让人感到困惑,因为它们与引用(&运算符)一起学习。*符号用于很多'在C ++中的东西,并没有帮助,因为使用指针,*符号做两件事,我们有两(2)个名称:解除引用和< em>间接。

当我们声明指向某个类型的指针时,例如int *intPtr = //CODE HERE,我们使变量接受地址*intPtr并将rvalue(在二元运算符右侧)的内存中的地址分配给变量intPtrintPtr - 或者,右值的地址 - 本身可以传递并用作左值。我们称之为“解除引用”。

然后,当我们想要访问存储在存储器地址的东西的时,我们使用代码体中的间接运算符*来访问存储的值。所以,让我们说这样做:

int num = 35;
int num2 = 0;
int *intPtr = &num; // here using the reference operator & to assign the address
                    // of num to intPtr

然后我们可以通过以下方式访问num后面的值:

num2 = *intPtr; 

这里,*间接运算符实际上正在执行 else :它用于访问存储在intPtr中存储的地址的值。

发生混乱的地方:

因此,当我们看到一个带有指针作为参数的函数头时,它就像“Wha”?正在使用哪个*?“

returntype functionIdentifier(type *num)  

在这种情况下,作为参数接收的是存储器地址。然后,参数可以在函数体中使用。也就是说,间接运算符*可用于访问存储在传入参数中的存储器地址中存储的值(指针 - 在此num中)。