В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
4, 5, и 6 то же самое, [только 112], тест является указателем. Если Вы хотите два указателя, необходимо использовать:
int *test, *test2;
Или, еще лучше (чтобы ясно дать понять все):
int* test;
int* test2;
Хорошее эмпирическое правило, много людей, кажется, схватывает эти понятия: В C++ большое семантическое значение получено лево-привязкой ключевых слов или идентификаторов.
Берут, например:
int const bla;
константа относится к "международному" слову. То же со звездочками указателей, они относятся к ключевому слову, оставленному их. И фактическое имя переменной? Да, это объявляется тем, что оставляют его.
Указатель является модификатором к типу. Лучше читать их справа налево, чтобы лучше понять, как звездочка изменяет тип. 'интервал *' может быть считан как "указатель на интервал'. В многократных объявлениях необходимо определить, что каждая переменная является указателем, или она будет создана как стандартная переменная.
1,2 и 3) Тест имеет тип (интервал *). Пробел не имеет значения.
4,5 и 6) Тест имеет тип (интервал *). Test2 имеет интервал типа Снова, пробел несуществен.
Много инструкций по кодированию рекомендуют только объявить одна переменная на строку . Это избегает любого беспорядка вида, который Вы имели прежде, чем задать этот вопрос. Большинство программистов на 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
Используйте "По часовой стрелке Правило На спирали" , чтобы помочь проанализировать объявления C/C++;
существует три простых шага для следования:
Запуск с неизвестного элемента, переместитесь в спираль/направление по часовой стрелке; когда обнаружение со следующими элементами заменяет их соответствующими английскими операторами:
[X]
или[]
: Выстройте X размеров... или Массив неопределенный размер...
(type1, type2)
: функция, передающая type1 и возврат type2...
*
: указатель (указатели) на...- Продолжают делать это в спирали/направлении по часовой стрелке, пока все маркеры не были покрыты.
- Всегда твердость что-либо в круглой скобке сначала!
кроме того, объявления должны быть в отдельных операторах, когда возможный (который верен подавляющее большинство времен).
Пробел вокруг звездочек не имеет никакого значения. Все три означают то же самое:
int* test;
int *test;
int * test;
" int *var1, var2
" злой синтаксис, который просто предназначают для смущения людей и нужно избежать. Это расширяется до:
int *var1;
int var2;
В 4, 5 и 6, test
всегда указатель, и test2
не указатель. Пробел никогда не является (почти) значительным в C++.
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
.