Какой правильный формат для адреса (& amp;) и оператора косвенного обращения

Я видел много разных способов написания адреса оператора (&) и оператор косвенности (*)

Если я не ошибаюсь, это должно быть так:

//examples
int var = 5;
int *pVar = var;

cout << var << endl; //this prints the value of var which is 5

cout << &var << endl; //this should print the memory address of var

cout << *&var << endl; //this should print the value at the memory address of var

cout << *pVar << endl; //this should print the value in whatever the pointer is pointing to

cout << &*var << endl; //I've heard that this would cancel the two out

Что произойдет, если, например, вы написали &var как & var с пробелом между двумя? Общий синтаксис, который я видел: char* line = var;, char * line = var;, а также char *line = var;,

1

Решение

во-первых, int *pVar = var; это неверно; это не хранит адрес var, но он хранит адрес «5», что приведет к ошибке компиляции:

main.cpp: In function 'int main()':
main.cpp:9:15: error: invalid conversion from 'int' to 'int*' [-fpermissive]
int *pVar = var;
^~~

var должны быть ссылки в инициализации *pvar:

int *pVar = &var;

во-вторых, cout << &*var << endl; также приведет к ошибке при компиляции, потому что var не указатель (int*) тип переменной:

main.cpp: In function 'int main()':
main.cpp:19:13: error: invalid type argument of unary '*' (have 'int')
cout << &*var << endl; //I've heard that this would cancel the two out
^~~

Теперь, чтобы ответить на ваш вопрос, добавив пробел между ссылками (&) оператор и указатель (*) оператор не будет иметь абсолютно никакого значения для компилятора. Единственный раз, когда это имеет значение, это когда вы хотите разделить 2 токена; лайк const а также string например. Выполнение следующего кода просто для того, чтобы преувеличить пример того, что вы спрашиваете:

cout <<             &             var << endl;
cout <<                            *                    & var << endl;
cout <<                                   *pVar << endl;

Дает те же результаты, что и в коде без стольких пробелов:

0x7ffe243c3404
5
5
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]