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. Исходя из того, что ссылки на массив превращаются в указатели, скажите в чем разница для массива
между array и &array? 2.14. Как динамически выделить память для многомерного массива? 2.15. Как мне равноправно использовать статически и динамически задаваемые многомерные массивы при передаче их в качестве параметров функциям? 2.16. Вот изящный трюк: если я пишу
то теперь можно рассматривать "array" как массив, у которого индекс первого элемента равен единице. 2.17. Я передаю функции указатель, который она инициализирует
но указатель после вызова функции остается неизменным. 2.18. У меня определен указатель на char, который указывает еще и на int, причем мне необходимо переходить к следующему элементу типа int. Почему
не работает? 2.19. Могу я использовать void ** , чтобы передать функции по ссылке обобщенный указатель? |