main.cpp: 18: 20: ошибка: приведение от int * к int теряет точность [-fpermissive] - PullRequest
0 голосов
/ 11 октября 2018

Я буквально переписал код из моего урока, где он работает.Может кто-нибудь, пожалуйста, скажите мне, почему "(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 голосов
/ 11 октября 2018

Решение зависит от того, чего вы пытаетесь достичь.

Если вы хотите напечатать все числа из вашего массива, вам не следует пытаться использовать C-стиль для приведения вашего указателя к объект типа int .Вам просто нужно разыменовать указатель таким образом cout<<*tablica<<endl;.

Если вы хотите напечатать адреса элементов вашего массива, вам вообще ничего не нужно делать, а просто печатайте их cout<<tablica<<endl;

В обоих случаях, как заметил Н.М. в комментарии, вы должны сохранить другой указатель для удаления вашего массива, потому что вы модифицируете существующий, и в конце цикла tablica не указывает на начало массива.

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

int *originalPointer = tablica;

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

delete[] originalPointer;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...