Abakt 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Попробуйте почитать и подумать... А из примеров: вместо передачи многобайтной переменной можно передать на нее указатель; в функцию обработки структур или объединений можно передавать указатели на струк. или обьед. или на масивы того или другова.... компилятор при оптимизации переделывает к указателям. если Вы передаете масив в функцию из, скажем, 300 однобыйтных элементов, то какой буфер потребуется? А Си расценивае как передачу указателя на масив. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость mihask 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Могу назвать один минус в использовании указателей :) , если с ними не аккуратно работать то при обработке данных можно легко выйти за пределы обрабатываемого массива и записать данные в область памяти в которую данная функция записывать данные не должна. Причем компилятор вам об этом естествено не сообщит. Например вам необходимо записать число 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); } В данном случае ошибка с размером массива передаваемого при вызове функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба В сущности без указателя не обойтись при использовании любого определенного пользователем типа данных.С внутренними типами компилятор знает как обращаться, для пользовательского нужен указатель. В противном случае любую операцию с таким типом придется проделывать поэлементно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость mihask 29 января, 2007 Опубликовано 29 января, 2007 (изменено) · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Хотя структура помоему и используется в основном для делания пользовательских типов данных. :) Изменено 29 января, 2007 пользователем mihask Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Фактически, указатель - это адрес переменной (или функции), и без его использования практически не возможно работать с памятью данных. Вот простой пример: 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++} /* инкрементировать адрес */ Лучше, конечно, литературку соответствующую почитать. :) С книжкой то понятнее. Что то типа начальный курс Си и Си++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость mihask 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Вообще в Си например, без указателей, помоему довольно сложно программировать когда дело касается работы со структурами. Да и быстродействие и размер кода в приложениях для микроконтроллеров иногда имеет значение. А вот например современные языки программирования java,С# наоборот отказались от указателей для того что бы повысить надежность программ реализованных на этих языках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abakt 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба друзья, огромное спасибо. пошел тренироваться на "кошках" в смысле на сишках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость mihask 29 января, 2007 Опубликовано 29 января, 2007 (изменено) · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. Ой звиняюсь обманул :), но это ограничение все таки было :) правда в очень древних реализациях Си :) Изменено 29 января, 2007 пользователем mihask Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
unichorn 0 29 января, 2007 Опубликовано 29 января, 2007 (изменено) · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать. :) Изменено 29 января, 2007 пользователем unichorn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость mihask 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать. :) Звиняюсь - а здесь можно по подробней ? :) Это ведь получается Объектно - Ориентированное программирование на Си ? Можно наглядный примерчик этой штуки ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 29 января, 2007 Опубликовано 29 января, 2007 · Жалоба Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить :) Покажите как? Как передать массив по значению (в качестве аргумента) в функцию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
unichorn 0 29 января, 2007 Опубликовано 29 января, 2007 (изменено) · Жалоба Примерчик можно, сам проэкт сдох чёрт знает когда, поэтому коммерческой ценности непредставляет (и соответственно недаделан). Правда он под семейство MCU51(Keil2), но для понятия сути вещей сгодится. PS: ногами сильно непинать, делалось всё на скорую руку, хотя по датам можно понять оч медленно (изначально было ясно что прект загнётся). Device.rar Изменено 29 января, 2007 пользователем unichorn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться