Получить адрес многомерного статического массива - PullRequest
2 голосов
/ 01 июня 2011

Как я могу получить адрес многомерного статического массива? Например, это мой массив

char array[2][10] = {"word1", "word2"};

Можно ли получить адрес, чтобы я мог ссылаться на этот массив, используя такой указатель?

char** pointer;

Я пробовал & массив или непосредственно указатель = (символ **) массив; но он вылетает при запуске.

Ответы [ 2 ]

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

char **pointer означает, что указатель указывает на указатель. Поэтому ожидается, что *pointer будет указателем (например, 4-байтовое значение, которое можно интерпретировать как адрес).

Это не относится к вашему массиву: это непрерывная область в памяти (20 байт).

Поэтому, когда вы пытаетесь преобразовать массив в char **, ваше приложение вылетает. Это преобразование невозможно, char ** должен указывать на указатель.

2 голосов
/ 01 июня 2011

«массив» - это адрес массива в памяти, но это не символ **. Пока вы можете разыграть его, приложение будет зависать, если вы попытаетесь

printf("%s", pointer[1]);

потому что в вашем случае это, вероятно, то же самое, что и

printf("%s", (char *)(0x00000031));

, так как указатель [1] означает «второй 4-байтовый указатель (при условии x86), начиная с« массива »». Указатель [0] МОЖЕТ не аварийно завершить работу, но не будет отображать слово «word1» по той же причине.

Вы, вероятно, хотите (это трудно запомнить, поэтому я должен был проверить онлайн, надеюсь, это правильно):

char (*pointer)[10] = array;

Указатель на массив из 10 символов. И если вы используете указатель [1], это теперь означает «второй блок из 10 символов, начиная с« массива »».

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