Каково различие между символом * константа и символом константы *?

Первый подход заключается в использовании root.state('zoomed'), но он не должен быть универсально доступным. Он работает как на Windows, так и на моей машине с Ubuntu. Однако, под моей машиной Arch это не так.


Второе - сначала получить максимальный размер , а затем установить геометрию вручную, например:

m = root.maxsize()
root.geometry('{}x{}+0+0'.format(*m))

Это работает на большинстве машин, но не на всех. Например, в моем Arch maxsize() возвращает (1425, 870), а реальная геометрия развернутого окна должна быть (1440, 848). Таким образом, вы также не можете полагаться на это.


И третий, на мой взгляд, лучший подход - использовать root.wm_attributes('-zoomed', 1). Это универсально доступно и кажется самым безопасным. На некоторых машинах масштабирование может увеличиваться только по ширине или по высоте, но по сравнению с предыдущим методом этот никогда не даст вам окно, частично находящееся за пределами экрана.

Наконец, если вы хотите полноэкранное, а не просто увеличенное окно, используйте root.wm_attributes('-fullscreen', 1). Он предоставляет встроенную ссылку на поведение оконного менеджера, таким образом, работая намного лучше, чем играть с overrideredirect и устанавливать геометрию вручную (что на некоторых платформах может привести к неуправляемому окну, которое может быть закрыто только собственным интерфейсом или убивает процесс , не будет отображаться на панели задач и т. д ...)

258
задан amiregelz 27 November 2012 в 04:46
поделиться

7 ответов

Разница в том, что const char * является указателем на const char , а char * const - константа указатель на char .

Во-первых, указанное значение не может быть изменено, но указатель может быть изменен. Во-вторых, указанное значение может измениться, но указатель не может (аналогично ссылке).

Существует также

const char * const

, который является постоянным указателем на константный символ (поэтому ничего в нем нельзя изменить ).

Примечание:

Следующие две формы эквивалентны:

const char *

и

char const *

Точная причина этого описана в стандарте C ++, но важно отметить и избежать путаницы. Я знаю несколько стандартов кодирования, которые предпочитают:

337
ответ дан 23 November 2019 в 02:41
поделиться

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

const char * mychar

и

char * const mychar

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

3
ответ дан 23 November 2019 в 02:41
поделиться

Я полагаю, вы имеете в виду const char * и char * const.

Первый, const char *, является указателем на постоянный символ. Сам указатель является изменяемым.

Второй, char * const, является постоянным указателем на символ. Указатель не может измениться, символ, на который он указывает, может.

И еще есть const char * const, где указатель и символ не могут измениться.

1
ответ дан 23 November 2019 в 02:41
поделиться

const char * - указатель на постоянный символ
char * const - постоянный указатель на символ
const char * const равно постоянный указатель на постоянный символ

14
ответ дан 23 November 2019 в 02:41
поделиться

const * char is invalid C code and is meaningless. Perhaps you meant to ask the difference between a const char * and a char const *, or possibly the difference between a const char * and a char * const?

See also:

22
ответ дан 23 November 2019 в 02:41
поделиться

const always modifies the thing that comes before it (to the left of it), EXCEPT when it's the first thing in a type declaration, where it modifies the thing that comes after it (to the right of it).

So these two are the same:

int const *i1;
const int *i2;

they define pointers to a const int. You can change where i1 and i2 points, but you can't change the value they point at.

This:

int *const i3 = (int*) 0x12345678;

defines a const pointer to an integer and initializes it to point at memory location 12345678. You can change the int value at address 12345678, but you can't change the address that i3 points to.

41
ответ дан 23 November 2019 в 02:41
поделиться

Чтобы избежать путаницы, всегда добавляйте квалификатор const.

int       *      mutable_pointer_to_mutable_int;
int const *      mutable_pointer_to_constant_int;
int       *const constant_pointer_to_mutable_int;
int const *const constant_pointer_to_constant_int;
95
ответ дан 23 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: