Abakt 0 Posted January 29, 2007 · Report post Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
arttab 0 Posted January 29, 2007 · Report post Попробуйте почитать и подумать... А из примеров: вместо передачи многобайтной переменной можно передать на нее указатель; в функцию обработки структур или объединений можно передавать указатели на струк. или обьед. или на масивы того или другова.... компилятор при оптимизации переделывает к указателям. если Вы передаете масив в функцию из, скажем, 300 однобыйтных элементов, то какой буфер потребуется? А Си расценивае как передачу указателя на масив. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Guest mihask Posted January 29, 2007 · Report post Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Могу назвать один минус в использовании указателей :) , если с ними не аккуратно работать то при обработке данных можно легко выйти за пределы обрабатываемого массива и записать данные в область памяти в которую данная функция записывать данные не должна. Причем компилятор вам об этом естествено не сообщит. Например вам необходимо записать число 0 в массив : int array[5]; void FillZero(int* ptr_array, int size_array) { while (size_array !=0) { *ptr_array=0; ptr_array++; size_array--; } } void main() { FillZero(array, 6); } В данном случае ошибка с размером массива передаваемого при вызове функции. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
beer_warrior 0 Posted January 29, 2007 · Report post В сущности без указателя не обойтись при использовании любого определенного пользователем типа данных.С внутренними типами компилятор знает как обращаться, для пользовательского нужен указатель. В противном случае любую операцию с таким типом придется проделывать поэлементно. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Guest mihask Posted January 29, 2007 (edited) · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Хотя структура помоему и используется в основном для делания пользовательских типов данных. :) Edited January 29, 2007 by mihask Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
prottoss 0 Posted January 29, 2007 · Report post Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Фактически, указатель - это адрес переменной (или функции), и без его использования практически не возможно работать с памятью данных. Вот простой пример: int array[128]; .... for(int i = 0; i < 128; i++){ array[i] = 0;} /* адрес начала массива - array, смещение - i */ Так вот - переменная array - указатель на массив array[128]. Этот код можно записать и по другому, при этом работать он будет быстрее и размер его будет меньше int array[128]; int * pointer = array; .... for(int i = 0; i < 128; i++){ *pointer = 0; /* записать по адресу pointer 0 */ pointer++} /* инкрементировать адрес */ Лучше, конечно, литературку соответствующую почитать. :) С книжкой то понятнее. Что то типа начальный курс Си и Си++ Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Guest mihask Posted January 29, 2007 · Report post Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Вообще в Си например, без указателей, помоему довольно сложно программировать когда дело касается работы со структурами. Да и быстродействие и размер кода в приложениях для микроконтроллеров иногда имеет значение. А вот например современные языки программирования java,С# наоборот отказались от указателей для того что бы повысить надежность программ реализованных на этих языках. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abakt 0 Posted January 29, 2007 · Report post друзья, огромное спасибо. пошел тренироваться на "кошках" в смысле на сишках. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted January 29, 2007 · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
prottoss 0 Posted January 29, 2007 · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Guest mihask Posted January 29, 2007 (edited) · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. Ой звиняюсь обманул :), но это ограничение все таки было :) правда в очень древних реализациях Си :) Edited January 29, 2007 by mihask Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
unichorn 0 Posted January 29, 2007 (edited) · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать. :) Edited January 29, 2007 by unichorn Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Guest mihask Posted January 29, 2007 · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать. :) Звиняюсь - а здесь можно по подробней ? :) Это ведь получается Объектно - Ориентированное программирование на Си ? Можно наглядный примерчик этой штуки ? :) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dxp 0 Posted January 29, 2007 · Report post Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) Покажите как? Как передать массив по значению (в качестве аргумента) в функцию? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
unichorn 0 Posted January 29, 2007 (edited) · Report post Примерчик можно, сам проэкт сдох чёрт знает когда, поэтому коммерческой ценности непредставляет (и соответственно недаделан). Правда он под семейство MCU51(Keil2), но для понятия сути вещей сгодится. PS: ногами сильно непинать, делалось всё на скорую руку, хотя по датам можно понять оч медленно (изначально было ясно что прект загнётся). Device.rar Edited January 29, 2007 by unichorn Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...