我对使用C ++进行编码比较陌生,并且被要求创建一个处理指针和地址的程序。我坚持使用的部分是使用两个存储器地址之间的差异来改变分子的值(我们正在处理分数)。
这是我给出的作业:http://cdn.frugalfinders.com/assignment.pdf
我遇到问题2.这是我到目前为止的C ++代码:
#include <iostream>
#include <fstream>
#include <cstring>
#include "fraction.h"
using namespace std;
int main()
{
int i1;
fraction f1(2,5);
int i2;
fraction farray[5];
float x1;
double x2;
char c1;
int A[6];
int *ip1;
float *fp1;
fraction *ffp1;
double *dp1;
// Print the addresses of the variables
cout << endl;
cout << "i1 at: " << &i1 << endl;
cout << "f1 at: " << &f1 << endl;
cout << "i2 at: " << &i2 << endl;
cout << "farray at: " << &farray << endl;
cout << "x1 at: " << &x1 << endl;
cout << "x2 at: " << &x2 << endl;
cout << "c1 at: " << &c1 << endl;
cout << "A at: " << &A << endl;
cout << "ip1 at: " << &ip1 << endl;
cout << "fp1 at: " << &fp1 << endl;
cout << "ffp1 at: " << &ffp1 << endl;
cout << "dp1 at: " << &dp1 << endl;
// Print the values of the variables
cout << endl;
cout << "f1 is: " << f1 << endl;
cout << "ip1 is: " << ip1 << endl;
cout << "fp1 is: " << fp1 << endl;
cout << "ffp1 is: " << ffp1 << endl;
cout << "dp1 is: " << dp1 << endl << endl;
// Store the address of i2 in ip1
ip1 = &i2;
// Change the numerator of f1 to 23
cout << f1 << endl;
i1 = (&i2) - 4;
*i1 = 23;
cout << f1 << endl;
return 0;
}
我无法弄清楚如何获得
下的部分// Change the numerator of f1 to 23
上班。非常感谢任何帮助!
答案 0 :(得分:1)
我猜(确实无法肯定地说)你可能会得到你期望的输出
*(ip1 - 2) = 23;
但实际上这个练习很垃圾。你的教授要求你编写的代码在C ++中是非法的,并且没有任何用处,我可以看到。
为了解释原因,您可以使用指针算法从现有地址获取新地址。但指针算法在某些情况下才合法,使用指针算法从另一个变量的地址获取一个变量的地址是不合法的。但这就是你被要求做的事情。
答案 1 :(得分:1)
由于计算机内存是连续的,因此当您为变量分配空格时,它们会一个接一个地存储。 由于i2在f1之后立即声明,因此f1和i2的地址之间的差异将为您提供分配给f1的内存空间。但是,我不明白你怎么可能使用差值来改变分子的值,因为差值会给f1占用的SPACE而不是分子的地址。