Почему с массивами, почему [5] == 5 [a]?

Да, именно по этой причине вы получаете предупреждение этого компилятора. Функция sqlite3_key () не определена в версии libsqlite3, включенной в iOS. Добавление в объявление функции не поможет - оно исправит это предупреждение компилятора, но это просто означает, что вы получите ошибку компоновщика, поскольку функция не определена нигде.

Если вы вы купили SEE, вы могли бы создать свою собственную копию SQLite, встроить ее в свое приложение и просто не использовать libsqlite3 системы. Это означает, что вам нужно будет сказать «да», когда в процессе подачи заявки на приложение спрашивает, включает ли ваше приложение шифрование, что означает дополнительную документацию и время, прежде чем вы сможете отправить приложение. Я не уверен, есть ли четкое указание на то, сможет ли Apple принять его даже тогда - вероятно, они будут, но они, как известно, удивляют людей.

1531
задан Cœur 21 October 2018 в 07:55
поделиться

5 ответов

Стандарт C определяет [] оператор следующим образом:

a[b] == *(a + b)

Поэтому a[5] оценит к:

*(a + 5)

и 5[a] оценит к:

*(5 + a)

a указатель на первый элемент массива. a[5] значение, этому 5 лет элементы далее от a, который совпадает с *(a + 5), и от математики начальной школы мы знаем, что те равны (дополнение коммутативное ).

1830
ответ дан Marco Bonelli 21 October 2018 в 07:55
поделиться

Хороший вопрос/ответы.

Просто хочу указать, что указатели C и массивы не тот же , хотя в этом случае различие не важно.

Рассматривают следующие объявления:

int a[10];
int* p = a;

В a.out, символ в адресе, это - начало массива и символ , p в адресе, где указатель хранится, и значение указателя в той ячейке памяти является началом массива.

23
ответ дан PolyThinker 21 October 2018 в 07:55
поделиться

И, конечно

 ("ABCD"[2] == 2["ABCD"]) && (2["ABCD"] == 'C') && ("ABCD"[2] == 'C')

главная причина для этого состояла в том, что назад в 70-х, когда C был разработан, компьютеры не имели большой памяти (64 КБ был много), таким образом, компилятор C не сделал большой проверки синтаксиса. Следовательно" X[Y]" был скорее вслепую переведен в" *(X+Y)",

Это также объясняет" +=" и" ++" синтаксисы. Все в форме" A = B + C" имело ту же скомпилированную форму. Но, если B был тем же объектом как A, то оптимизация уровня ассемблера была доступна. Но компилятор не был достаточно ярок для распознавания его, таким образом, разработчик имел к (A += C). Точно так же, если C был 1, различная оптимизация уровня ассемблера была доступна, и снова разработчик должен был сделать ее явной, потому что компилятор не распознал его. (Позже компиляторы делают, таким образом, те синтаксисы являются в основном ненужными в эти дни)

191
ответ дан franji1 21 October 2018 в 07:55
поделиться

Поскольку доступ к массиву определяется с точки зрения указателей. a[i] определяется для значения *(a + i), который является коммутативным.

278
ответ дан David Thornley 21 October 2018 в 07:55
поделиться

Одна вещь никто, кажется, не упомянул о проблеме Dinah с sizeof:

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

54
ответ дан 22 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

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