Почему нельзя обратиться к массиву, не указывая индекс его элемента - C (СИ)
Формулировка задачи:
Всем привет.
вот часть кода.
Вопрос 1)
Почему вместо конструкции tmp = m [ 0 ] ; нельзя написать вот так tmp = m; ведь m имя массива это указатель на его первый элемент?
почему всю конструкцию нельзя записать так.
tmp = m;
m = m+2;
m+2 = tmp;
Вопрос 2)
в строке printf(" %s",*m++); мне подчёркивает *m++ и пишет что ошибка...
но по конструкции это же правильно?! *m++ //След. элемент. m++ //Адрес след элемента.
#define N 3 int main() { char *m [ N ] = {"First","Second","The last"}; char *tmp; int k; k = N; tmp = m [ 0 ] ; m [ 0 ] = m [ 2 ] ; m [ 2 ] = tmp; while(k-- > 0) { printf(" %s",*m++); } .... }
Решение задачи: «Почему нельзя обратиться к массиву, не указывая индекс его элемента»
textual
Листинг программы
char *m [ N ] = {"First","Second","The last"}
Объяснение кода листинга программы
В представленном коде происходит объявление массива указателей на строки. При этом, переменная m
является массивом указателей, а каждый указатель в этом массиве указывает на строку.
В данном случае, в массиве указателей m
содержатся три строки: First
, Second
и The last
. Индексы элементов массива начинаются с 0, поэтому первый элемент массива будет иметь индекс 0, второй - индекс 1 и так далее.
Список элементов кода:
- Тип данных переменных: char *m [N] - массив указателей на строки.
- Значения переменных: m[0] =
First
, m[1] =Second
, m[2] =The last
. - Количество элементов: N = 3.
- Индексы элементов: 0, 1, 2.
- Значения элементов:
First
,Second
,The last
.