Различие между [квадратными скобками] и *звездочка

Я определенно подверг бы графику управлению версиями. Разность не могла бы быть очень полезной из различного инструмента как diffmerge, но Вы можете все еще контроль две версии диаграммы и просматривать их рядом для наблюдения различий.

я не вижу оснований, почему результирующая графика не должна быть сохранена в той же системе управления версиями, которую используют кодеры. Однако при создании графики с помощью файлов PSD или файлов PDN, Вы могли бы хотеть создать отдельный репозиторий для тех, поскольку у них есть различный контекст к фактическому концу jpeg или gif, который производится и развертывается с разработанным приложением.

34
задан bobobobo 24 November 2009 в 15:13
поделиться

5 ответов

Когда вы используете тип char x [] вместо char * x без инициализации , вы можете считать их одинаковыми. Вы не можете объявить новый тип как char x [] без инициализации, но вы можете принять их как параметры функций. В этом случае они такие же, как указатели.

Когда вы используете тип char x [] вместо char * x при инициализации , они полностью отличаются на 100%.


Пример того, как ] char x [] отличается от char * x :

char sz[] = "hello";
char *p = "hello";

sz на самом деле является массивом, а не указателем.

assert(sizeof(sz) == 6);
assert(sizeof(sz) != sizeof(char*)); 
assert(sizeof(p) == sizeof(char*));

Пример того, как char x [] совпадает с char * x :

void test1(char *p)
{
  assert(sizeof(p) == sizeof(char*));
}

void test2(char p[])
{
  assert(sizeof(p) == sizeof(char*));
}

Стиль кодирования для перехода к функциям:

На самом деле не имеет значения, какой один ты делаешь. Некоторые люди предпочитают char x [] , потому что ясно, что вам нужен массив, а не адрес отдельного элемента.

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


Дополнительная литература:

См. Этот пост под названием Массивы - это не то же самое, что указатели!

68
ответ дан 27 November 2019 в 16:20
поделиться

Стандарт C ++ 13.1.3

- Разные объявления параметров только в указателе * вместо массива [] эквивалентны. То есть массив декларация скорректирована, чтобы стать объявление указателя (8.3.5). Только второе и последующие измерения массива важны для типов параметров (8.3.4). [Пример:

 int f(char*);
 int f(char[]);  // same as f(char*);
 int f(char[7]);  // same as f(char*);
 int f(char[9]);  // same as f(char*);
 int g(char(*)[10]);
 int g(char[5][10]);  // same as g(char(*)[10]);
 int g(char[7][10]);  // same as g(char(*)[10]);
 int g(char(*)[20]);  // different from g(char(*)[10]);

—конечный пример]

13
ответ дан 27 November 2019 в 16:20
поделиться

Между вашими двумя кодами нет никакой разницы, за исключением, очевидно, разного стиля. В обоих случаях массив передается по ссылке, а не по значению, поскольку параметры функции type * x и type x [] семантически одинаковы.

3
ответ дан 27 November 2019 в 16:20
поделиться

Что касается стиля, я высуну шею и скажу, что int * arrayOfInt лучше. Какой бы синтаксис вы ни использовали, вы передаете указатель, и тип должен прояснить это.

Это только мое мнение.

1
ответ дан 27 November 2019 в 16:20
поделиться

Эти два выражения эквивалентны. Каждый из них вычисляет адрес первого элемента массива arrayOfInt.

-1
ответ дан 27 November 2019 в 16:20
поделиться
Другие вопросы по тегам:

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