尝试为自定义数组设置Void *的值,只有在从std :: cin设置void *时才有效

时间:2014-01-13 03:27:34

标签: c++

void* val = 0;
cout << "\n\tSelect a value to enter: "; cin >> val;        
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;       
ARR->insert(temp,0,false);

^这个,有效。存储了值,我的getAllValues函数完美运行。

完成同样的事情:

void* val = new int(10);
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;       
ARR->insert(temp,0,false);  

int val = 10;
void* val = &val;
SDI::StoredData* temp = new SDI::StoredData();
temp->data = val;       
ARR->insert(temp,0,false);  

或任何其他变体返回空值,为什么EARTH会发生这种情况?是的,我知道,我不应该使用void*,但这是一项要求。谢谢!

编辑:

for(int i = 0; i<max; i++)
{       
    if(data[i].data!= nullptr)
    {


     int *p = (int*)data[i].data;


     }
}

1 个答案:

答案 0 :(得分:0)

让我们检查“有效”的代码。

void* val = 0;
cout << "\n\tSelect a value to enter: "; cin >> val;

您正在调用cin.operator>>(void*),其工作方式与数字类型的getter非常相似 - 它会读取一个数字,并将其存储在val中。

所以在这里,temp->data不是指向任何东西的指针;这是输入的实际数字。

至于你的第二个片段:

void* val = new int(10);

在这种情况下,val不是数字。这是一个数字的地址。 (是的,地址在技术上也是一个数字。这是你的第一个代码段工作的唯一原因。但在这里,它不是10;它类似于0x30528680包含的对象的地址数字10。)

至于你的第三个:

int val = 10;
void* val = &val;

如果这甚至是编译,val将是一个指向局部变量的指针,它只存在于它所在函数的末尾。返回的瞬间,该值将指向who-know -什么。 (当然,它不会编译,因为你试图重新定义val ...)