main.cpp:18:20:错误:从“ int *”转换为“ int”会失去精度[-fpermissive]

时间:2018-10-11 03:05:36

标签: c++ pointers

我从字面上重新编写了工作中的代码。有人可以告诉我为什么“(int)tablica”不起作用而“ tablica”却起作用吗?

#include <iostream>
using namespace std;

int ile;

int main()
{
cout<<"ile liczb w tablicy: "<<endl;
cin>>ile;



int *tablica;
tablica = new int [ile];

   for(int i=0; i<ile; i++)
{
    cout<<(int)tablica<<endl;
    tablica++;
}


delete [] tablica;  
return 0;
}

我在工作并且没有适当的IDE,所以我使用https://www.onlinegdb.com/online_c++_compiler

1 个答案:

答案 0 :(得分:0)

解决方案取决于您要实现的目标。

如果要打印数组中的所有数字,则不应尝试使用C样式将指针强制转换为int类型的对象。您只需要以cout<<*tablica<<endl;的方式解除对指针的引用。

如果要打印数组元素的地址,则根本不需要执行任何操作,只需打印它们cout<<tablica<<endl;

在两种情况下,正如注释中所注意的nm一样,您应该存储另一个指针以删除数组,因为您修改了现有数组,并且在循环结束时tablica并不指向开头数组。

int *tablica;
tablica = new int [ile];

int *originalPointer = tablica;

... increment and decrement tablica poitner so many times as you want ...

delete[] originalPointer;