приведение от 'int *' к 'unsigned int' теряет ошибку точности - PullRequest
0 голосов
/ 14 июля 2020
#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
    int temp = 300;

    cout << "Address of variable temp:  " << (unsigned)&temp;
    return 0;
}

main. cpp: В функции 'int main ()': main. cpp: 17: 57: ошибка: приведение из 'int *' к 'unsigned int' теряет точность [ -fpermissive] cout << "Адрес переменной temp:" << (без знака) & temp; </p>

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

Вы конвертируете указатель в int в unsigned int.

Проблема в том, что unsigned int слишком мало, чтобы содержать все возможные значения указателя на int.

Вы можете попробовать unsigned long long, которого должно быть достаточно

(unsigned long long)&temp;

Вы можете проверить размерность типа с помощью sizeof(), который возвращает количество байтов типа / переменной

С моей платформой (Linux amd64) из

std::cout << sizeof(&temp) << std::endl;
std::cout << sizeof(unsigned) << std::endl;

я получаю 8 (для sizeof(&temp)) и 4 (для sizeof(long) ).

И, очевидно, 4-байтовая переменная не может представлять все возможные значения 8-байтовой переменной.

С другой платформы вы можете получить другие значения.

2 голосов
/ 14 июля 2020

Не уверен, почему вы пытаетесь его разыграть. Но если вы пытаетесь увидеть адрес памяти temp, вам следует сделать &temp.

#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
    int temp = 300;

    cout << "Address of variable temp:  " << &temp;
    return 0;
}
...