我有一个声明double的main函数。然后它将它传递给void Display,它显示double。然后main将double(by值)传递给函数void Pointers,它调用display函数然后更改double的值。然后我再次从main中运行display函数,再次传递double。但是双重已经变成了新值(我们将它改为Pointers())并且我不明白为什么。
据我所知,当我们通过值传递时,我们正在将函数交给一个副本使用,并且它可以对该副本执行任何操作,但它不会更改原始版本。如果我们通过引用传递,那么我们只是将地址交给原始数据。
由于我们通过了价值,它不应该改变它自己的副本而只留下原始版本吗?
以下代码供参考。
#include <iostream>
#include <cctype>
#include <string>
#include <vector>
#include <iomanip>
#include <windows.h> // for a bigger window
using namespace std;
void Heading()
{
system("cls");
cout << "David Fritz, CO127, 04/9/2013 Assignment 14 (Week 12)";
cout << endl;
cout << endl;
}
void Display(string source, double &value, double* &pointer)
{
cout << "Source: " << source << endl;
cout << "Double Address: " << &value << endl;
cout << "Double Value: " << value << endl;
cout << "Pointer Address: " << &pointer << endl;
cout << "Pointer Value: " << pointer << endl;
cout << "Dereferenced Pointer Value: " << *pointer << endl << endl;
}
void Pointer(double value, double* &pointer)
{
string source = "Method";
Display(source, value, pointer);
value = 7;
*pointer = value;
}
int main()
//2. In the main
// • Call the heading function
// • Create a double and assigns it a value
// • Create a pointer that points to the double
{
MoveWindow(GetConsoleWindow(), 100, 0, 700, 800, TRUE); //moves and resizes window
Heading();
string source = "Main";
double aValue = 4;
double* pointer = &aValue;
Display(source, aValue, pointer);
//system("pause");
Pointer(aValue, pointer);
//system("pause");
Display(source, aValue, pointer);
cout << endl;
cout << "Q: If you pass the double by value to the function, why does the value of the" << endl
<< "double change in the main after you return from the function?" << endl << endl;
cout << "A: I dont know. We passed it its own copy, but it didn't care. I'll figure it out"
}
这是作业(我发帖,因为第5步具体告诉我如何传递双重和指针)
编写一个创建
的程序
1.创建一个标题功能,显示您的姓名,班级编号和日期
2.在主体中
•调用标题功能
•创建一个double并为其赋值
•创建指向双重的指针
3.编写一个显示函数,该函数接受一个字符串,一个指针和一个double,并使用cout语句显示描述您正在显示的内容的文本,然后依次显示每个语句:
它显示的位置(从main或方法调用?)
双地址
双值
指针地址
指针值(指针保存地址,这应该是double的地址)
取消引用的指针值(指针指向的内容,double值)
4.从main调用显示功能以显示指针的属性并加倍
5.使用void返回类型创建一个函数,该函数从main获取指针和double(从值传递double)。然后显示指针的值,并按照主要内容加倍
•更改double的值,然后为该点指定double的值(* pointer = double)
•如果ptr是点名称,x是double的名称,则* ptr = x;
6.返回主要重新显示指针和双重的属性
7.添加暂停
8.回答这一个问题:
•调用标题功能
•显示以下问题及其答案
“如果你将双重值传递给函数,为什么从函数返回后,double中的double值会发生变化?”
答案 0 :(得分:0)
Pointer()确实获得了自己的副本(double值),并且更改此不会更改main函数中的值。
但是,你也传递Pointer()一个地址(double * pointer),并将该地址的东西设置为值(7),并带有“* pointer = value;”。因为你给了Pointer()aValue(&amp; aValue)的地址,所以它在main()中改变。
编辑:所以你是正确的传递值而不是改变原始版本,但是在这种情况下你已经通过值'em>和通过'reference'传递了(好吧,一个指针,这是排序像参考一样),所以它改变了。
还有其他一些事情:
a)你的缩进有点混乱(虽然这可能只是复制和粘贴它) b)除非你想改变'指针'的值,而不是它指向的地址的值,否则不必通过引用(double *&amp; pointer)传递指针。可能'双*指针'更好。
干杯
答案 1 :(得分:0)
检查此版本。 它完整而且好多了。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void Display(string source, double &value, double* pointer)
{
cout << source << endl;
cout << left << setw(40) << "Original Double Address: " << &value << endl;
cout << left << setw(40) << "Original Double Value: " << value << endl;
cout << left << setw(40) << "Original Pointer Address: " << &pointer << endl;
cout << left << setw(40) << "Original Pointer Value: " << pointer << endl;
cout << left << setw(40) << "Original Dereferenced Pointer Value: " << *pointer << endl << endl;
}
void Pointer(double value, double *pointer)
{
string source = "Pointer Function";
value = 1842;
*pointer = value;
Display(source, value, pointer);
}
void main()
{
cout << "Student Name, CO127, Assignment 14.1" << endl << endl;
string source = "Main";
double aValue = 921;
double* pointer = &aValue;
// Initial Values Displayed
Display(source, aValue, pointer);
// Values after passing to function
Pointer(aValue, pointer);
// Values from main after being modified in function.
Display(source, aValue, pointer);
cout << endl;
cout << "Answer " << endl;
}