реклама на сайте
подробности

 
 
> в чем прелесть указателей ?
Abakt
сообщение Jan 29 2007, 05:03
Сообщение #1


Участник
*

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



Растолкуйте популярно в чем польза от использования указателей. если возмжно то на примерах. Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jan 29 2007, 08:49
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



В сущности без указателя не обойтись при использовании любого определенного пользователем типа данных.С внутренними типами компилятор знает как обращаться, для пользовательского нужен указатель. В противном случае любую операцию с таким типом придется проделывать поэлементно.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
mihask
сообщение Jan 29 2007, 09:19
Сообщение #3


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в
функцию только через указатель на структуру. Хотя структура помоему и используется в
основном для делания пользовательских типов данных. smile.gif

Сообщение отредактировал mihask - Jan 29 2007, 09:20
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 29 2007, 11:20
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(mihask @ Jan 29 2007, 12:19) *
Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в
функцию только через указатель на структуру.

Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 29 2007, 11:38
Сообщение #5


Гуру
******

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



Цитата(dxp @ Jan 29 2007, 15:20) *
Цитата(mihask @ Jan 29 2007, 12:19) *

Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в
функцию только через указатель на структуру.

Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно.
И даже массив мона))) Ежели правильна приготовить smile.gif


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 29 2007, 12:57
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(prottoss @ Jan 29 2007, 14:38) *
Цитата(dxp @ Jan 29 2007, 15:20) *
Цитата(mihask @ Jan 29 2007, 12:19) *

Ну да еще структуру целиком нельзя передать в качестве аргумента функции. Ее можно передать в
функцию только через указатель на структуру.

Как это нельзя?! Еще как можно. И передавать, и возвращать. Это массив нельзя передать в качестве аргумента по значению (только указатель - имя массива в этом контексте автоматически перобразовывается к указателю на его первый элемент), а структуру вполне можно.
И даже массив мона))) Ежели правильна приготовить smile.gif

Покажите как? Как передать массив по значению (в качестве аргумента) в функцию?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 29 2007, 13:13
Сообщение #7


Гуру
******

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



Цитата(dxp @ Jan 29 2007, 16:57) *
Покажите как? Как передать массив по значению (в качестве аргумента) в функцию?


Код
typedef struct
{
   UCHAR array[100];

} array_as_param;

...

UCHAR array1[100];

...

void fun(array_as_param param)
{
   UCHAR *ptr = (UCHAR *)&param;
    for(UCHAR i = 0; i < 10; i++)
       *ptr++ = 0;
}

...

void main(void)
{
   fun(*(array_as_param *)array1);

....

}


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 29 2007, 15:36
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(prottoss @ Jan 29 2007, 16:13) *
Цитата(dxp @ Jan 29 2007, 16:57) *
Покажите как? Как передать массив по значению (в качестве аргумента) в функцию?


Код
...

void main(void)
{
   fun(*(array_as_param *)array1);

....

}


Здесь передается не массив, а структура:

void fun(array_as_param param), где array_as_param - это структура (как видно выше)

А код этот некрасивый, как и почти любой другой код, где используется ручное преобразование типов. Гораздо лучше, прозрачнее, логичнее и безопаснее было бы написать:

aray_as_param s = array1; fun(s);

Вопрос стоял о том, как передать массив по значению в качестве аргумента. А не о том, как переправить значения массива в функцию. Т.ч., как говорилось, массив всегда в функцию передается через указатель.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 29 2007, 16:02
Сообщение #9


Гуру
******

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



Цитата(dxp @ Jan 29 2007, 19:36) *
Цитата(prottoss @ Jan 29 2007, 16:13) *

Цитата(dxp @ Jan 29 2007, 16:57) *
Покажите как? Как передать массив по значению (в качестве аргумента) в функцию?

Код
...


Здесь передается не массив, а структура:
void fun(array_as_param param), где array_as_param - это структура (как видно выше)
Здесь в качестве параметра передается ИМЕННО МАССИВ smile.gif , НО выдаем мы его за структуру smile.gif
Цитата(dxp @ Jan 29 2007, 19:36) *
А код этот некрасивый, как и почти любой другой код, где используется ручное преобразование типов. Гораздо лучше, прозрачнее, логичнее и безопаснее было бы написать:
aray_as_param s = array1; fun(s);
Вы хоть сами то читаете и проверяете то что пишите??? Эта строчка никогда работать не будет. Ну а так, вообще, красиво написанно smile.gif Может быть Вы имели ввиду это
Код
aray_as_param *s = (aray_as_param *)array1; fun(*s);

Цитата(dxp @ Jan 29 2007, 19:36) *
Вопрос стоял о том, как передать массив по значению в качестве аргумента.
Ответ получен - МОЖНО


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Abakt   в чем прелесть указателей ?   Jan 29 2007, 05:03
- - arttab   Попробуйте почитать и подумать... А из примеров: в...   Jan 29 2007, 05:34
- - mihask   Цитата(Abakt @ Jan 29 2007, 08:03) Растол...   Jan 29 2007, 06:48
|||- - dxp   Цитата(dxp @ Jan 29 2007, 19:36) Здесь пе...   Jan 29 2007, 18:13
||- - prottoss   Цитата(dxp @ Jan 29 2007, 16:57) Покажите...   Jan 29 2007, 20:22
|||- - zltigo   Цитата(prottoss @ Jan 29 2007, 19:22) мас...   Jan 29 2007, 23:20
||||- - prottoss   Цитата(zltigo @ Jan 30 2007, 03:20) Цитат...   Jan 29 2007, 23:51
|||- - dxp   Цитата(prottoss @ Jan 29 2007, 23:22) Цит...   Jan 30 2007, 08:09
|||- - prottoss   Цитата(dxp @ Jan 30 2007, 12:09) Цитата(p...   Jan 30 2007, 11:50
|||- - dxp   Цитата(prottoss @ Jan 30 2007, 14:50) Цит...   Jan 30 2007, 12:51
|||- - prottoss   Цитата(dxp @ Jan 30 2007, 16:51) Цитата(p...   Jan 30 2007, 13:03
|||- - dxp   Цитата(prottoss @ Jan 30 2007, 16:03) Цит...   Jan 30 2007, 16:15
|||- - prottoss   Цитата(dxp @ Jan 30 2007, 20:15) Послушай...   Jan 30 2007, 16:43
||- - prottoss   Цитата(dxp @ Jan 29 2007, 16:57) Цитата(p...   Jan 30 2007, 14:28
|- - mihask   Цитата(dxp @ Jan 29 2007, 14:20) Цитата(m...   Jan 29 2007, 11:45
- - prottoss   Цитата(Abakt @ Jan 29 2007, 09:03) Растол...   Jan 29 2007, 09:50
- - mihask   Цитата(Abakt @ Jan 29 2007, 08:03) Растол...   Jan 29 2007, 10:07
- - Abakt   друзья, огромное спасибо. пошел тренироваться на ...   Jan 29 2007, 10:39
- - unichorn   Цитата(prottoss @ Jan 29 2007, 11:38) Цит...   Jan 29 2007, 12:10
|- - mihask   Цитата(unichorn @ Jan 29 2007, 15:10) Цит...   Jan 29 2007, 12:29
- - unichorn   Примерчик можно, сам проэкт сдох чёрт знает когда,...   Jan 29 2007, 13:10
|- - mihask   Цитата(unichorn @ Jan 29 2007, 16:10) При...   Jan 29 2007, 13:46
- - el34   2Abakt оч. рекомендую поглядеть "Ted Jensen...   Jan 29 2007, 14:15
|- - Abakt   Цитата(el34 @ Jan 29 2007, 14:15) 2Abakt ...   Jan 29 2007, 22:27
- - el34   Abakt>Огромное спасибо! Читаю. ну разумеетс...   Jan 29 2007, 22:49
- - dryadae   Передавать структуры в функцию - неправильно; стек...   Jan 29 2007, 22:54
|- - prottoss   Цитата(dryadae @ Jan 30 2007, 02:54) Пере...   Jan 29 2007, 23:04
|- - defunct   ЦитатаБыла задача, передать массив в функцию, как ...   Jan 30 2007, 00:46
|- - prottoss   Цитата(defunct @ Jan 30 2007, 04:46) Цита...   Jan 30 2007, 01:15
||- - SpiritDance   Цитата(prottoss @ Jan 30 2007, 01:15) И е...   Jan 30 2007, 11:42
||- - prottoss   Цитата(SpiritDance @ Jan 30 2007, 15:42) ...   Jan 30 2007, 12:15
||- - SpiritDance   Цитата(prottoss @ Jan 30 2007, 12:15) Не ...   Jan 30 2007, 14:40
||- - prottoss   Цитата(SpiritDance @ Jan 30 2007, 18:40) ...   Jan 30 2007, 14:47
||- - SpiritDance   Цитата(prottoss @ Jan 30 2007, 14:47) При...   Jan 30 2007, 15:12
||- - prottoss   Цитата(SpiritDance @ Jan 30 2007, 19:12) ...   Jan 30 2007, 15:24
|- - prottoss   Цитата(defunct @ Jan 30 2007, 04:46) масс...   Jan 30 2007, 01:36
|- - zltigo   Цитата(prottoss @ Jan 30 2007, 00:36) Цит...   Jan 30 2007, 02:26
||- - prottoss   Цитата(zltigo @ Jan 30 2007, 06:26) А, пр...   Jan 30 2007, 02:36
||- - zltigo   Цитата(prottoss @ Jan 30 2007, 01:36) Вы ...   Jan 30 2007, 03:27
|||- - prottoss   Цитата(zltigo @ Jan 30 2007, 07:27) Перед...   Jan 30 2007, 03:42
||- - dryadae   Цитата(prottoss @ Jan 30 2007, 02:36) Цит...   Jan 30 2007, 13:13
||- - prottoss   Цитата(dryadae @ Jan 30 2007, 17:13) Цита...   Jan 30 2007, 13:27
|||- - dryadae   Цитата(prottoss @ Jan 30 2007, 13:27) Цит...   Jan 30 2007, 13:49
|||- - prottoss   Цитата(dryadae @ Jan 30 2007, 17:49) Крив...   Jan 30 2007, 14:41
||- - prottoss   Цитата(dryadae @ Jan 30 2007, 17:13) Вы п...   Jan 30 2007, 14:12
||- - dryadae   ЦитатаЦитата(dryadae @ Jan 30 2007, 17:49...   Jan 30 2007, 14:43
|- - Сергей Борщ   Цитата(prottoss @ Jan 30 2007, 00:36) Ест...   Jan 30 2007, 12:13
|- - prottoss   Цитата(Сергей Борщ @ Jan 30 2007, 16:13) ...   Jan 30 2007, 12:29
|- - Сергей Борщ   Цитата(prottoss @ Jan 30 2007, 11:29) Цит...   Jan 30 2007, 16:55
|- - prottoss   Цитата(Сергей Борщ @ Jan 30 2007, 20:55) ...   Jan 30 2007, 17:13
- - SasaVitebsk   Чем прелестно программирование, что можно любую оп...   Jan 30 2007, 01:26
- - dryadae   Да Бог с вами. Только накушаетесь вы со стеком, по...   Jan 30 2007, 14:50
|- - prottoss   Цитата(dryadae @ Jan 30 2007, 18:50) Да Б...   Jan 30 2007, 15:01
|- - dryadae   Цитата(prottoss @ Jan 30 2007, 15:01) Цит...   Jan 30 2007, 15:05
|- - prottoss   Цитата(dryadae @ Jan 30 2007, 19:05) Это ...   Jan 30 2007, 15:10
- - defunct   protoss Цитатапрекрасно понимают о чем говорят и ч...   Jan 30 2007, 18:06
- - prottoss   Цитата(defunct @ Jan 30 2007, 22:06) prot...   Jan 30 2007, 18:12
- - dryadae   Цитата(prottoss @ Jan 30 2007, 18:12) Цит...   Jan 30 2007, 18:20
- - prottoss   Цитата(prottoss @ Jan 30 2007, 22:12) Зде...   Jan 30 2007, 19:01
- - defunct   Цитата(prottoss @ Jan 30 2007, 18:01) Цит...   Jan 31 2007, 02:17


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016