|
|
 |
Ответов
(1 - 14)
|
Jan 29 2007, 06:48
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(Abakt @ Jan 29 2007, 08:03)  Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Могу назвать один минус в использовании указателей  , если с ними не аккуратно работать то при обработке данных можно легко выйти за пределы обрабатываемого массива и записать данные в область памяти в которую данная функция записывать данные не должна. Причем компилятор вам об этом естествено не сообщит. Например вам необходимо записать число 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); } В данном случае ошибка с размером массива передаваемого при вызове функции.
|
|
|
|
|
Jan 29 2007, 09:19
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру. Хотя структура помоему и используется в основном для делания пользовательских типов данных.
Сообщение отредактировал mihask - Jan 29 2007, 09:20
|
|
|
|
|
Jan 29 2007, 09:50
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Abakt @ Jan 29 2007, 09:03)  Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Фактически, указатель - это адрес переменной (или функции), и без его использования практически не возможно работать с памятью данных. Вот простой пример: Код 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++} /* инкрементировать адрес */ Лучше, конечно, литературку соответствующую почитать.  С книжкой то понятнее. Что то типа начальный курс Си и Си++
--------------------
|
|
|
|
|
Jan 29 2007, 10:07
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(Abakt @ Jan 29 2007, 08:03)  Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо. Вообще в Си например, без указателей, помоему довольно сложно программировать когда дело касается работы со структурами. Да и быстродействие и размер кода в приложениях для микроконтроллеров иногда имеет значение. А вот например современные языки программирования java,С# наоборот отказались от указателей для того что бы повысить надежность программ реализованных на этих языках.
|
|
|
|
|
Jan 29 2007, 10:39
|
Участник

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292

|
друзья, огромное спасибо. пошел тренироваться на "кошках" в смысле на сишках.
|
|
|
|
|
Jan 29 2007, 11:45
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(dxp @ Jan 29 2007, 14:20)  Цитата(mihask @ Jan 29 2007, 12:19)  Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру.
Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. Ой звиняюсь обманул  , но это ограничение все таки было  правда в очень древних реализациях Си
Сообщение отредактировал mihask - Jan 29 2007, 11:50
|
|
|
|
|
Jan 29 2007, 12:10
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901

|
Цитата(prottoss @ Jan 29 2007, 11:38)  Цитата(dxp @ Jan 29 2007, 15:20)  Цитата(mihask @ Jan 29 2007, 12:19)  Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру.
Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить  А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать.
Сообщение отредактировал unichorn - Jan 29 2007, 12:10
|
|
|
|
|
Jan 29 2007, 12:29
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(unichorn @ Jan 29 2007, 15:10)  Цитата(prottoss @ Jan 29 2007, 11:38)  Цитата(dxp @ Jan 29 2007, 15:20)  Цитата(mihask @ Jan 29 2007, 12:19)  Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в функцию только через указатель на структуру.
Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно. И даже массив мона))) Ежели правильна приготовить  А ежели правильно приготовить с указателями на функции, то можно получить и объект который сам себя будет и обрабатывать.  Звиняюсь - а здесь можно по подробней ?  Это ведь получается Объектно - Ориентированное программирование на Си ? Можно наглядный примерчик этой штуки ?
|
|
|
|
|
Jan 29 2007, 13:10
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901

|
Примерчик можно, сам проэкт сдох чёрт знает когда, поэтому коммерческой ценности непредставляет (и соответственно недаделан). Правда он под семейство MCU51(Keil2), но для понятия сути вещей сгодится. PS: ногами сильно непинать, делалось всё на скорую руку, хотя по датам можно понять оч медленно (изначально было ясно что прект загнётся).
Сообщение отредактировал unichorn - Jan 29 2007, 13:22
Прикрепленные файлы
Device.rar ( 364.23 килобайт )
Кол-во скачиваний: 73
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|