Размещение звездочки в объявлениях указателя

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

86
задан Peter Mortensen 1 January 2016 в 20:19
поделиться

8 ответов

4, 5, и 6 то же самое, [только 112], тест является указателем. Если Вы хотите два указателя, необходимо использовать:

int *test, *test2;

Или, еще лучше (чтобы ясно дать понять все):

int* test;
int* test2;
121
ответ дан Milan Babuškov 24 November 2019 в 07:57
поделиться

Хорошее эмпирическое правило, много людей, кажется, схватывает эти понятия: В C++ большое семантическое значение получено лево-привязкой ключевых слов или идентификаторов.

Берут, например:

int const bla;

константа относится к "международному" слову. То же со звездочками указателей, они относятся к ключевому слову, оставленному их. И фактическое имя переменной? Да, это объявляется тем, что оставляют его.

-2
ответ дан mstrobl 24 November 2019 в 07:57
поделиться

Указатель является модификатором к типу. Лучше читать их справа налево, чтобы лучше понять, как звездочка изменяет тип. 'интервал *' может быть считан как "указатель на интервал'. В многократных объявлениях необходимо определить, что каждая переменная является указателем, или она будет создана как стандартная переменная.

1,2 и 3) Тест имеет тип (интервал *). Пробел не имеет значения.

4,5 и 6) Тест имеет тип (интервал *). Test2 имеет интервал типа Снова, пробел несуществен.

1
ответ дан Ron Warholic 24 November 2019 в 07:57
поделиться

Много инструкций по кодированию рекомендуют только объявить одна переменная на строку . Это избегает любого беспорядка вида, который Вы имели прежде, чем задать этот вопрос. Большинство программистов на C++, с которыми я работал, кажется, придерживается этого.

<час>

Что-то вроде в стороне я знаю, но что-то, что я нашел полезным, должно считать объявления назад.

int* test;   // test is a pointer to an int

Это начинает работать очень хорошо, особенно когда Вы начинаете объявлять указатели константы, и это становится хитрым, чтобы знать, является ли это указателем, это - константа, или является ли это вещью, на которую указатель указывает на это, константа

int* const test; // test is a const pointer to an int

int const * test; // test is a pointer to a const int ... but many people write this as  
const int * test; // test is a pointer to an int that's const
31
ответ дан Scott Langham 24 November 2019 в 07:57
поделиться

Используйте "По часовой стрелке Правило На спирали" , чтобы помочь проанализировать объявления C/C++;

существует три простых шага для следования:

  1. Запуск с неизвестного элемента, переместитесь в спираль/направление по часовой стрелке; когда обнаружение со следующими элементами заменяет их соответствующими английскими операторами:

    [X] или []: Выстройте X размеров... или Массив неопределенный размер...

    (type1, type2): функция, передающая type1 и возврат type2...

    *: указатель (указатели) на...

  2. Продолжают делать это в спирали/направлении по часовой стрелке, пока все маркеры не были покрыты.
  3. Всегда твердость что-либо в круглой скобке сначала!

кроме того, объявления должны быть в отдельных операторах, когда возможный (который верен подавляющее большинство времен).

34
ответ дан stkent 24 November 2019 в 07:57
поделиться

Пробел вокруг звездочек не имеет никакого значения. Все три означают то же самое:

int* test;
int *test;
int * test;

" int *var1, var2" злой синтаксис, который просто предназначают для смущения людей и нужно избежать. Это расширяется до:

int *var1;
int var2;
42
ответ дан Ates Goral 24 November 2019 в 07:57
поделиться

В 4, 5 и 6, test всегда указатель, и test2 не указатель. Пробел никогда не является (почти) значительным в C++.

5
ответ дан Peter Mortensen 24 November 2019 в 07:57
поделиться

Cases 1, 2 and 3 are the same, they declare pointers to int variables. Cases 3, 4 and 5 are the same, as they declare one pointer to, and one int variable respectively. If you want do declare two pointers in one line (which you shouldn't), you need to put an asterisk in front of each variable name:

int *test, *test2;

There is no certain correct way that says where the asterisk goes. int* test looks better because it is easier for us to imagine that appending * to the end of a type means "pointer to" that type. However, int *test makes more sense, because you can work with it like the minus sign in maths:

-(-x) = x

is analogous to

*(*test) = test

This has always helped me. Sadly, the upshot of it all is that sometimes I use int* test and sometimes int *test.

-1
ответ дан 24 November 2019 в 07:57
поделиться