АК
Анютка Крошка

CИ. Литерные указатели.. Подскажите пожалуйста



Всем привет.

вот часть кода.

#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++);
}

....

}

Вопрос 1)
Почему вместо конструкции tmp = m [ 0 ] ; нельзя написать вот так tmp = m; ведь m имя массива это указатель на его первый элемент?
почему всю конструкцию нельзя записать так.
tmp = m;
m = m+2;
m+2 = tmp;

Вопрос 2)
в строке printf(" %s",*m++); мне подчёркивает *m++ и пишет что ошибка.. .
но по конструкции это же правильно? ! *m++ //След. элемент. m++ //Адрес след элемента.

Павел ____________
Павел ____________

> Почему вместо конструкции tmp = m [ 0 ] ; нельзя написать вот так tmp = m;
> ведь m имя массива это указатель на его первый элемент?
tmp -- это char*
m, как ты сам пишешь, "указатель на первый элемент", т. е. указатель на char*, т. е. char**

tmp = *m;
*m = *(m + 2);
*(m + 2) = tmp;

m -- немодифицируемое, а ты его пытаешься поменять операцией ++

char **pm = m;
...
while(k-- > 0)
{
printf(" %s",*pm++);
}

Похожие вопросы
[C++] Фигня какая-то с указателями
Срочно помогите решить пожалуйста!! ! c++ указатели и массивы
С++ Указатели на классы
Подскажите способ создания вложенного предметного указателя?
Массив указателей с++
Как достать указатель из TList на C++ и присвоить его другому указателю?
Имеет ли Microsoft Flash Player постоянные указатели на адрес памяти? Или указатели на указатели?
Имеет ли Adobe Flash Player постоянные указатели на адрес памяти? Или указатели на указатели?
Программа с помощью указателей
Указатель на паскале