Строка как индекс массива - PullRequest
3 голосов
/ 03 июня 2011

В 3["XoePhoenix"] индекс массива имеет тип массив символов.Можем ли мы сделать это в C?Не правда ли, что индекс массива должен быть целым числом?

Что означает 3["XeoPhoenix"]?

Ответы [ 3 ]

5 голосов
/ 03 июня 2011

3["XoePhoenix"] - это то же самое, что и "XoePhoenix"[3], поэтому он будет вычисляться как char 'P'.

Синтаксис массива в C не более чем другой способ записи *( x + y ), гдеx и y являются подвыражениями перед и внутри скобок.Из-за коммутативности сложения эти подвыражения могут быть изменены без изменения смысла выражения.

Так 3["XeoPhoenix"] компилируется как *( 3 + "XeoPhoenix" ), где строка распадается на указатель и добавляется 3на этот указатель, который, в свою очередь, приводит к указателю на 4-й символ в строке.* разыменовывает этот указатель, поэтому это выражение оценивается как 'P'.

"XeoPhoenix"[ 3 ] будет скомпилировано как *( "XeoPhoenix" + 3 ), и вы можете видеть, что это приведет к тому же результату.

5 голосов
/ 03 июня 2011

3["XeoPhoenix"] эквивалентно "XeoPhoenix"[3] и будет соответствовать 4-му символу, т.е. 'P'.

В целом a[i] и i[a] эквивалентны.

a[i] = *(a + i) = *(i + a) = i[a] 
0 голосов
/ 03 июня 2011

В Си массивы - это очень простые структуры данных с последовательными блоками памяти.Поэтому они должны быть целыми числами, поскольку эти индексы являются не чем иным, как смещением адресов в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...