簡體   English   中英

c ++將指針傳遞給函數

[英]c++ passing pointers to a function

我試圖用C ++創建一個控制台應用程序,提示用戶輸入一個浮點數,然后采用該數字並將整數部分和小數部分分開。

輸出示例如下:

請輸入一個浮點數:
800.589
整數部分是800,小數部分是.589

我的解決方案如下所示:

#include <iostream>
#include <cmath>
using namespace std;

void spliceAnyNumber (double anyNumber)
{
double integerPart = 1;
double fractionPart = 1;
double *pIntegerPart = &integerPart;
double *pFractionPart = &fractionPart;
fractionPart = fmod(anyNumber,1);
integerPart = anyNumber - fractionPart;
cout << "The integer part is " << *pIntegerPart << " and the fraction part is " << *pFractionPart << "\n";
cout << endl;
cout << "The address of *pIntegerPart is " << &integerPart << "\n";
cout << endl;
cout << "The address of *pFractionPart is " << &fractionPart << "\n";
cout << endl;
}

int main()
{   
cout << "Please enter a floating point number: ";
double anyNumber = 0;
cin >> anyNumber;
cout << endl;    
spliceAnyNumber(anyNumber);
system("Pause");
return 0;   
}

我編寫了程序,但是還要求我將指針傳遞給函數並操縱解引用的值。 我嘗試在下面執行此操作,但是從編譯器返回了很多錯誤。

#include <iostream>
#include <cmath>
using namespace std;

void spliceAnyNumber (double *pAnyNumber)
{
double integerPart = 1;
double fractionPart = 1;
double *pIntegerPart = &integerPart;
double *pFractionPart = &fractionPart;
&fractionPart = fmod(&anyNumber,1);
&integerPart = &anyNumber - &fractionPart;
cout << "The integer part is " << *pIntegerPart << " and the fraction part is " <<     *pFractionPart << "\n"; *pFractionPart << "\n";
cout << endl;
cout << "The address of *pIntegerPart is " << &integerPart << "\n";
cout << endl;
cout << "The address of *pFractionPart is " << &fractionPart << "\n";
cout << endl;
}

int main()
{   
cout << "Please enter a floating point number: ";
double *pAnyNumber = &anyNumber;
cin >> *pAnyNumber;
cout << endl;    
spliceAnyNumber(*pAnyNumber);
system("Pause");
return 0;   
}

添加指針在哪里出錯? 版本1有效,而版本2無效。

我已經注明了這一內聯。

#include <iostream>
#include <cmath>
using namespace std;

void spliceAnyNumber (double *pAnyNumber)
{
  double integerPart = 1;
  double fractionPart = 1;
  double *pIntegerPart = &integerPart;
  double *pFractionPart = &fractionPart;
  &fractionPart = fmod(&anyNumber,1);  // <- you should dereference pAnyNumber instead, and assign to fractionPart (i.e. "fractionPart = fmod(*pAnyNymber, 1);
  &integerPart = &anyNumber - &fractionPart;  // <- similar as above
  cout << "The integer part is " << *pIntegerPart << " and the fraction part is " <<     *pFractionPart << "\n"; *pFractionPart << "\n";
  cout << endl;
  cout << "The address of *pIntegerPart is " << &integerPart << "\n";
  cout << endl;
  cout << "The address of *pFractionPart is " << &fractionPart << "\n";
  cout << endl;
}

int main()
{   
  cout << "Please enter a floating point number: ";
  double *pAnyNumber = &anyNumber;  // <- you haven't declared an 'anyNumber' variable to take the address of
  cin >> *pAnyNumber;
  cout << endl;    
  spliceAnyNumber(*pAnyNumber);
  system("Pause");
  return 0;   
}

您必須先聲明anyNumber才能取消引用:

double *pAnyNumber = &anyNumber; // references an undeclared variable

傳遞給函數時只需取地址即可。 在此之前,您可以使用普通變量-無需指針:

double anyNumber;
cin >> anyNumber;
cout << endl;
spliceAnyNumber(&anyNumber); 

此外,您在函數中使用了錯誤的運算符。 應該是這樣的:

*pFractionPart = fmod(*pAnyNumber,1);
*pIntegerPart = *pAnyNumber - fractionPart;

另一件事是語法無效: &variable = ...字面意思是“變量的地址=”,這將導致double**

因此,您唯一要做的更改就是function參數,並對其進行訪問。 不需要函數內的所有那些指針。

&運算符采用變量的地址,因此typeof(&anyNumber) == double** 您需要*運算符。

您應該將double *pAnyNumber讀為“當我應用*運算符時,我得到一個double ”。 (您實際上得到了一個左值引用,但這並不會使您感到困惑,並且可能會使您感到困惑……)

您的main功能是一團糟; 使其與原始版本相同,並更改spliceAnyNumber(pAnyNumber); spliceAnyNumber(&pAnyNumber);

我假設當您編寫anyNumber您實際上的意思是pAnyNumber 如果您有指針

double* p;

您通過*p而不是&p取消引用。 前者給您double ,后者給您double**

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM