【发布时间】:2018-05-03 13:24:05
【问题描述】:
如果我使用 printf 而不是正确打印值,我无法打印以筛选返回的指针指向的值,以使用 cout 在函数内部声明它也正确打印,如果我调试我看到指向 double 的指针正确返回了它的值(注意我指向的是静态而不是本地),无法理解这里的代码有什么问题(在 Visual Studio 2017 社区版中成功编译)。
#include "stdafx.h"
#include <iostream>
using namespace std;
const double VAT=0.17;
double * addVAT(static double sum)
{
sum = sum + (sum*VAT);
return ∑
}
int main()
{
double total = 120;
double *totalWithVat;
cout << "Type the total before VAT:";
cin >> total;
totalWithVat = addVAT(total);
printf("The total with VAT is: %f \n", *totalWithVat);
cout << *totalWithVat << endl;
}
提前致谢。
【问题讨论】:
-
我从 VC++ "warning C4042: 'sum': has bad storage class" 得到,这应该是一个错误,真的。您的代码没有按照您的想法执行。
-
addVAT 声明中的这个静态是什么。我不认为它编译
-
不编译,因为
static double sum是参数的无效存储类。 addVAT 例程返回一个悬空指针。 -
取消引用悬空指针是未定义的行为。未定义的行为可以做正确的事情,并且可以给出奇怪的输出。