我在互联网上找到了一个代码段。当我编译并运行它时,输出为70.但我不知道代码中发生了什么。请帮帮我。
#include <iostream>
using namespace std;
void doubleNumber (int *num )
{
*num = *num * 2;
}
int main ()
{
int num = 35;
doubleNumber (&num) ;
cout <<num ;
return 0;
}
答案 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 = #
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(在二元运算符右侧)的内存中的地址分配给变量intPtr
。 intPtr
- 或者,右值的地址 - 本身可以传递并用作左值。我们称之为“解除引用”。
然后,当我们想要访问存储在存储器地址的东西的值时,我们使用代码体中的间接运算符*
来访问存储的值。所以,让我们说这样做:
int num = 35;
int num2 = 0;
int *intPtr = # // here using the reference operator & to assign the address
// of num to intPtr
然后我们可以通过以下方式访问num
后面的值:
num2 = *intPtr;
这里,*
间接运算符实际上正在执行 else :它用于访问存储在intPtr
中存储的地址的值。
发生混乱的地方:
因此,当我们看到一个带有指针作为参数的函数头时,它就像“Wha”?正在使用哪个*
?“
returntype functionIdentifier(type *num)
在这种情况下,作为参数接收的是存储器地址。然后,参数可以在函数体中使用。也就是说,间接运算符*
可用于访问存储在传入参数中的存储器地址中存储的值(指针 - 在此num
中)。