2015-05-26 2 views
0
string * sptemp = (string *) 0x000353E0; 

Что именно этот код хочет сказать?C++ строки и указатели путаницы

Я знаю, что в левой части мы определяем указатель на строку, но я не мог понять правильную часть.

+9

Это в значительной степени кричит неопределенное поведение. –

+0

Правая часть - это значение *, заданное объекту, определенному слева. Также как в 'int n = 10;'. –

+0

- это то же самое: string * sptemp; sptemp = 0X000353E0 –

ответ

4

Это означает, что требуется числовое значение, преобразовать его в указатель с этим значением в качестве адреса, на который он указывает, а затем использовать это значение для инициализации переменной sptemp.

Если память по этому адресу содержит действительный объект string, то вы можете использовать указатель для доступа к нему. Если нет, попытка сделать это даст неопределенное поведение.

4
string * sptemp = (string *) 0x000353E0; 

Что этот код точно хочу сказать?

Он говорит, относиться к данным, расположенным по адресу 0x000353E0, как будто он держит string и присвоить адрес переменной sptemp. Доступ к данным можно получить через переменную указателя sptemp.

+2

На самом деле это не говорит о доступе, не так ли? Он просто говорит, что это так. –

+0

@EvdzhanMustafa, присваивая значение переменной 'sptemp', вы можете получить доступ к этому значению через этот адрес. –

0

Эти комментарии в основном правы, но не полностью. Мы действительно не знаем, что строка содержит std :: string. Может быть, строка - это бит оборудования с отображением памяти, адрес которого на встроенном SBC OP определяется аппаратным обеспечением 0x000353E0. В этом случае это вполне разумно, и то, что люди делают все время. Указатель «string * sptemp» установлен на аппаратный интерфейс.

Но это, наверное, вздор.

Смежные вопросы