2. Указатели и массивы
От: Кодт Россия  
Дата: 20.01.03 17:21
Оценка:
#Имя: FAQ.c.2
2.1. В одном файле у меня есть описание char a[6], а в другом я объявил extern char *a.
Почему это не работает?

2.2. Но я слышал, что char a[] эквивалентно char *a.

2.3. Тогда что же понимается под "эквивалентностью указателей и массивов" в С?

2.4. Тогда почему объявления указателей и массивов взаимозаменяемы в в качестве формальных параметров?

2.5. Как массив может быть значением типа lvalue, если нельзя присвоить ему значение?

2.6. Почему sizeof неправильно определяет размер массива, который передан функции в качестве параметра?

2.7. Кто-то объяснил мне, что массивы это на самом деле только постоянные указатели.

2.8. C практической точки зрения в чем разница между массивами и указателями?

2.9. Я наткнулась на шуточный код, содержащий "выражение" 5["abcdef"].
Почему такие выражения возможны в С?

2.10. Мой компилятор ругается, когда я передаю двумерный массив функции, ожидающей указатель на указатель.

2.11. Как писать функции, принимающие в качестве параметра двумерные массивы, "ширина" которых во время компиляции неизвестна?

2.12. Как объявить указатель на массив?

2.13. Исходя из того, что ссылки на массив превращаются в указатели, скажите в чем разница для массива
  int array[NROWS][NCOLUMNS];

между array и &array?

2.14. Как динамически выделить память для многомерного массива?

2.15. Как мне равноправно использовать статически и динамически задаваемые многомерные массивы при передаче их в качестве параметров функциям?

2.16. Вот изящный трюк: если я пишу
  int realarray[10];
  int *array = &realarray[-1];,

то теперь можно рассматривать "array" как массив, у которого индекс первого элемента равен единице.

2.17. Я передаю функции указатель, который она инициализирует
...
int *ip;
f(ip);
...

void f(ip)
int *ip;
{
  static int dummy = 5;
  ip = &dummy;
}

но указатель после вызова функции остается неизменным.

2.18. У меня определен указатель на char, который указывает еще и на int, причем мне необходимо переходить к следующему элементу типа int. Почему
  ((int *)p)++;

не работает?

2.19. Могу я использовать void ** , чтобы передать функции по ссылке обобщенный указатель?
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.