Что получается, если мы используем «указатель символа» в качестве индекса для символьного массива в C ++ и как этого добиться в c SHarp? - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть массив символов VC ++ "wchar_t arr [0x30] = {0x0,0x1, ..., 0xC ... шестнадцатеричная инициализация здесь ......} ". Есть еще один символьный указатель C ++ wchar_t * xyz .
Сделана что-то вроде ---- wchar_t ch = arr [xyz [2]] . Может кто-нибудь любезно объяснить подробно, что происходит в этом, потому что arr [] является массивом символов, и мы должны передать целое число как индекс в любой массив правильно? Но здесь индекс, переданный в массив символов «arr []», представляет собой другой символьный указатель xyz [2]. В приведенном выше коде предположим, что символ 'a' хранится в xyz [2] , что означает, что мы индексируем массив символов C ++ следующим образом --- arr [xyz [2]] становится arr ['a']. Пожалуйста, дайте мне знать. Как я могу добиться этого в c Sharp .. Вероятно, если я узнаю, что происходит в коде C ++ выше, я могу сам достичь этого в C SHarp. Может кто-нибудь любезно сообщить мне, что происходит здесь, в этом коде C ++.

1 Ответ

0 голосов
/ 16 ноября 2010

В результате wchar_t, хранящийся в xyz[2], повышается до до int, а затем используется как индекс в массиве arr.

означает, что, если xyz[2] содержит L'a', программа будет демонстрировать неопределенное поведение , поскольку arr имеет место только для 48 элементов, но L'a' будет повышен до 97.

Что касается второй части вашего вопроса, C # поддерживает только арифметику указателей внутри unsafe блоков, поэтому вы, вероятно, захотите использовать массивы вместо:

char[] arr = new char[0x30];
char[] xyz = Something();
char ch = arr[xyz[2]];
...