指针应该在哪里? 不熟悉C++程序设计, 尝试在此处对问题进行概念化:

指针应该在哪里? 不熟悉C++程序设计, 尝试在此处对问题进行概念化:,c++,arrays,pointers,C++,Arrays,Pointers,在本练习中,我们将仅限于一种数字类型, float,所以我们需要这种类型的数组;叫它fmemory。但是,指针值 (地址)也存储在内存中,因此我们需要另一个数组来存储它们。自从 我们使用数组索引对地址进行建模,并对除最大数组以外的所有数组进行索引 可以存储在int类型中,我们将创建一个这种类型的数组(称为pmemory)来保存这些 “指针。” fmemory的索引(称之为fmem_top)指向下一个可用的位置,其中有一个float 值可以存储。有一个类似于pmemory的索引(称之为pmem_t

在本练习中,我们将仅限于一种数字类型, float,所以我们需要这种类型的数组;叫它fmemory。但是,指针值 (地址)也存储在内存中,因此我们需要另一个数组来存储它们。自从 我们使用数组索引对地址进行建模,并对除最大数组以外的所有数组进行索引 可以存储在int类型中,我们将创建一个这种类型的数组(称为pmemory)来保存这些 “指针。”

fmemory的索引(称之为fmem_top)指向下一个可用的位置,其中有一个float 值可以存储。有一个类似于pmemory的索引(称之为pmem_top)。别担心 关于“内存不足”,我们假设这些数组足够大,因此每个 当我们存储一些东西时,我们可以简单地将它插入数组中的下一个索引号。 除此之外,我们不必担心内存管理

创建一个名为Float的类。我们将使用它对存储的float类型的编号进行建模 在fmemory中而不是在真实内存中。Float中唯一的实例数据是它自己的“地址”; 也就是说,其浮点值存储在fmemory中的索引。调用此实例变量 地址。类Float还需要两个成员函数。第一个是单参数构造函数 使用浮点值初始化浮点。此构造函数存储浮点值 fmem_top指向的fmemory元素中的值,并存储 fmem_地址中的顶部。这类似于编译器和链接器如何安排存储普通 实际内存中的变量。第二个成员函数是重载的&运算符。 它只返回addr中的指针(实际上是索引,类型int)值

所以,我已经扣除了我需要创造这样的东西

#include <iostream>
using namespace std;
class Float
{
private:
int addr;
float fmem_top,pmem_top;
public:
Float(float* fmem_top){};
Float(int* addr){}
};

int main()
{
//this is where I become confused
}
#包括
使用名称空间std;
班级浮动
{
私人:
国际地址;
浮动fmem_顶部、pmem_顶部;
公众:
浮动(浮动*fmem_top){};
浮点(int*addr){}
};
int main()
{
//这就是我感到困惑的地方
}
我会在main方法中使用类似的东西吗? 浮动fmem;
浮动pmem

试试这个。我认为这个练习对初学者来说是抽象的。(虽然我没有编译这个,但更多的是让你理解这个概念。)

const int NUM\u FLOATS\u MAX=1000;
班级浮动
{
静态浮动浮动arr[];
静态int fmem_顶部;
国际地址;
公众:
int运算符&({return addr;}
Float(Float f){floatArr[fmem_top]=f;addr=fmem_top;fmem_top++}
}
//静态成员需要在类声明之外定义
float float::floatArr[NUM_FLOATS_MAX];
int Float::fmem_top=0;
//应打印0和1,即索引。(我们如何获得浮点值
//我们不知道——让接线员超负荷*()?
int main()
{ 
浮点数f1=1,f2=2;
库特
在本练习中,我们将只使用一种数字类型float,因此我们需要一个这种类型的数组;称之为fmemory也存储在内存中,因此我们需要另一个数组来存储它们。因为我们使用数组索引来建模地址,并且除了最大数组之外的所有数组的索引都可以存储在int类型中,所以我们将创建一个这种类型的数组(称为pmemory)来保存这些“指针”

fmemory的索引(称为fmem_top)指向可以存储浮点值的下一个可用位置。pmemory也有类似的索引(称为pmem_top)。不要担心“内存”耗尽我们假设这些数组足够大,因此每次存储内容时,我们只需将其插入数组中的下一个索引号即可。除此之外,我们不必担心内存管理

创建一个名为Float的类。我们将使用它对存储在fmemory而不是实内存中的Float类型的数字进行建模。Float中唯一的实例数据是它自己的“地址”;也就是说,它的Float值存储在fmemory中的索引。调用此实例变量addr

类Float还需要两个成员函数。第一个是一个单参数构造函数,用于使用Float值初始化Float。此构造函数将Float值存储在fmem_top指向的fmemory元素中,并将fmem_top的值存储在addr中

这类似于编译器和链接器在实际内存中存储普通变量的方式

是的,当然

第二个成员函数是重载的&运算符。它只返回addr中的指针值(实际上是index,type int)

讨论 没有关于
pmemory
的预期用途的指示,因此不清楚应该如何处理它。这真的没有多大意义

总的来说,
Float
的接口没有为使用它的代码提供任何清晰的抽象:存储值的索引可以通过
&
检索,但是调用者仍然需要知道
fmemory
来查找实际的
Float


我希望课程有所改进。

如果你的老师给你举例说明他/她想要什么,那就太好了。阅读作业时,我认为Float的用法很简单,就像
Float f1,f2;
。好的,这很有意义。如果我想显示它,我会如何调用main方法中的地址?听起来像crazy问题旨在迷惑新程序员并使他们推迟编程。谢谢你帮我把它打断,我想我已经很糟糕了。我认为还有第二部分使用了pmemory,我没有包括它,因为我觉得我真的需要这一部分的帮助。我希望课程也有所改进。@Bygonaut,不客气。祝大家好运然后是要求和课程。
const int NUM_FLOATS_MAX = 1000;

class Float
{
    static float floatArr[];
    static int fmem_top;
    int addr;
public:
    int operator&() { return addr; }
    Float(float f) { floatArr[fmem_top] = f; addr = fmem_top; fmem_top++; }
}
// static members need to be defined outside the class declaration
float Float::floatArr[NUM_FLOATS_MAX];
int Float::fmem_top = 0;

// should print 0 and 1, the indices. (How we get the float value
// we don't know -- overload the operator*()?
int main() 
{ 
    Float f1 = 1, f2 = 2;
    cout << &f1 << endl << &f2 << endl; 
}
float fmemory[N]; // "we'll need an array of [float]"
int pmemory[N];   // "we'll create an array... pmemory"
int fmem_top = 0; // "next available place..." fmemory[fmem_top]
int pmem_top = 0; // "similar index to pmemory"
class Float
{
    int addr;
Float(float f)
{
    fmemory[fmem_top] = f;
    addr = fmem_top;
    ++fmem_top;
}
int operator&() { return addr; }