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

 
 
> в чем прелесть указателей ?
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
Ответов
dryadae
сообщение Jan 29 2007, 22:54
Сообщение #2


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

Группа: Новичок
Сообщений: 154
Регистрация: 7-03-06
Пользователь №: 15 051



Передавать структуры в функцию - неправильно; стек не резиновый. Хорошая практика - malloc + typecast + указатель. Или просто указатель, если речь идёт о статике.

Сообщение отредактировал dryadae - Jan 29 2007, 22:55
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 29 2007, 23:04
Сообщение #3


Гуру
******

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



Цитата(dryadae @ Jan 30 2007, 02:54) *
Передавать структуры в функцию - неправильно; стек не резиновый. Хорошая практика - malloc + typecast + указатель. Или просто указатель, если речь идёт о статике.
Конечно НЕПРАВИЛЬНО. smile.gif НО - спросили КАК - я показал smile.gif


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 30 2007, 00:46
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
Была задача, передать массив в функцию, как аргумент - передали

То что вы засунули внутрь функции
void fun(array_as_param param).. ,
массивом назвать нельзя...
Проверить легко (обращение внутри функции):

param[0] = 0;
даст ошибку, а это значит, что не массив был передан в функцию.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 30 2007, 01:36
Сообщение #5


Гуру
******

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



Цитата(defunct @ Jan 30 2007, 04:46) *
массивом назвать нельзя...
Проверить легко (обращение внутри функции):
param[0] = 0;
даст ошибку, а это значит, что не массив был передан в функцию.
Хорошо, вот Вам, уважаемый defunct простая задачка:

Есть структура, размером, ну так байт 64-256. И внутри некой функции, Вам необходимо, что бы все поля данной структуры были равны, допустим, нулю. Интересно, как Вы собираетесь решить данную проблему?


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 30 2007, 02:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(prottoss @ Jan 30 2007, 00:36) *
Цитата(defunct @ Jan 30 2007, 04:46) *
массивом назвать нельзя...
Проверить легко (обращение внутри функции):
param[0] = 0;
даст ошибку, а это значит, что не массив был передан в функцию.
Хорошо, вот Вам, уважаемый defunct простая задачка:

Есть структура, размером, ну так байт 64-256. И внутри некой функции, Вам необходимо, что бы все поля данной структуры были равны, допустим, нулю. Интересно, как Вы собираетесь решить данную проблему?

А, просите, какое отношение поставленая задачка имеет к непередаче массива в качестве параметра???
Ну как решается? Естественно sizeof() структуры и memset() ну и что?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 30 2007, 02:36
Сообщение #7


Гуру
******

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



Цитата(zltigo @ Jan 30 2007, 06:26) *
А, просите, какое отношение поставленая задачка имеет к непередаче массива в качестве параметра??? Ну как решается? Естественно sizeof() структуры и memset() ну и что?
А самое непосредственное. Вы же, когда будете вызывать memset() передадите указатель на тип char? Не так ли? Хотя фактически это будет приведенный к указателю на char адрес Вашей структуры. Почему я в свою функцию не могу передать массив в качестве параметра, приведя его к типу своей структуры???


--------------------
Go to the top of the page
 
+Quote Post
dryadae
сообщение Jan 30 2007, 13:13
Сообщение #8


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

Группа: Новичок
Сообщений: 154
Регистрация: 7-03-06
Пользователь №: 15 051



Цитата(prottoss @ Jan 30 2007, 02:36) *
Цитата(zltigo @ Jan 30 2007, 06:26) *
А, просите, какое отношение поставленая задачка имеет к непередаче массива в качестве параметра??? Ну как решается? Естественно sizeof() структуры и memset() ну и что?
А самое непосредственное. Вы же, когда будете вызывать memset() передадите указатель на тип char?

Неправда - void * smile.gif smile.gif smile.gif


Цитата(prottoss @ Jan 30 2007, 03:42) *
Цитата(zltigo @ Jan 30 2007, 07:27) *
Передал именно указатель на область памяти которая в качестве подмножества содержит наряду с мусором и кусочки памяти относящиеся к структуре. И работать memset() будет
с областью памяти обнулив и память относящуюся к тому что кото-то где-то считает относящуюся к структуре и всю прочую.
Отлично. Тогда говоря Вашими терминами, я, в своем примере, в функцию, в качестве параметра, передал область памяти

Вы передали то, что лежит в стеке. А в стеке лежит адрес (2 байта у near адресации, 4 у far/flat), и ничего больше excl.gif
"Передать" - значит затолкнуть в стек, а не засунуть в глобальную переменную, или куда-то там ещё...

push ebp
mov ebp, esp
start equ [ebp+4]
; вот где начинаются аргументы Вашей функции, порядок зависит от callspec

Сообщение отредактировал dryadae - Jan 30 2007, 13:24
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 30 2007, 14:12
Сообщение #9


Гуру
******

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



Цитата(dryadae @ Jan 30 2007, 17:13) *
Вы передали то, что лежит в стеке. А в стеке лежит адрес (2 байта у near адресации, 4 у far/flat), и ничего больше excl.gif
"Передать" - значит затолкнуть в стек, а не засунуть в глобальную переменную, или куда-то там ещё...
push ebp
mov ebp, esp
start equ [ebp+4]
; вот где начинаются аргументы Вашей функции, порядок зависит от callspec
Аххха smile.gif Тихо переметнулись на х86. ОК smile.gif , вот мой код для х86



Код
22:       fun(*(array_as_param *)array1);
0040B548   sub         esp,64h /* итит ехо на лево, это что со стеком вытворяють!!! */
0040B54B   mov         ecx,19h
0040B550   mov         esi,offset array1 (0042281c)
0040B555   mov         edi,esp
0040B557   rep movs    dword ptr [edi],dword ptr [esi]
0040B559   call        @ILT+5(fun) (0040100a)
0040B55E   add         esp,64h  /* о, опять, надо Билу Гею пожаловаться!!! */




Цитата(dryadae @ Jan 30 2007, 17:49) *
P.S. Кстати, команда call не заталкивает, а вызывает. По крайней мере, в 80x86 и Motorola 68K.
нюню, а это чьи слова?

Цитата
"Передать" - значит затолкнуть в стек ©
Так вот, строчка

Код
0000001A   ........           CALL    ?LONG_FARG_16_L07


Как раз заталкивает (Вашими словами) в стек ВЕСЬ МАССИВ


--------------------
Go to the top of the page
 
+Quote Post
dryadae
сообщение Jan 30 2007, 14:43
Сообщение #10


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

Группа: Новичок
Сообщений: 154
Регистрация: 7-03-06
Пользователь №: 15 051



Цитата
Цитата(dryadae @ Jan 30 2007, 17:49) *

P.S. Кстати, команда call не заталкивает, а вызывает. По крайней мере, в 80x86 и Motorola 68K.
нюню, а это чьи слова?

Цитата
"Передать" - значит затолкнуть в стек ©
Так вот, строчка

Код
0000001A   ........           CALL    ?LONG_FARG_16_L07


Как раз заталкивает (Вашими словами) в стек ВЕСЬ МАССИВ

Странный Вы человек. Сами написали в комменте напротив CALL'а "заталкивает", и теперь ставите знак равенства между вашей нетночностью и моими словами huh.gif

Сообщение отредактировал dryadae - Jan 30 2007, 14:48
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
- - beer_warrior   В сущности без указателя не обойтись при использов...   Jan 29 2007, 08:49
|- - mihask   Ну да еще структуру целиком нельзя передать в кач...   Jan 29 2007, 09:19
|- - dxp   Цитата(mihask @ Jan 29 2007, 12:19) Ну да...   Jan 29 2007, 11:20
|- - prottoss   Цитата(dxp @ Jan 29 2007, 15:20) Цитата(m...   Jan 29 2007, 11:38
||- - dxp   Цитата(prottoss @ Jan 29 2007, 14:38) Цит...   Jan 29 2007, 12:57
||- - prottoss   Цитата(dxp @ Jan 29 2007, 16:57) Покажите...   Jan 29 2007, 13:13
|||- - dxp   Цитата(prottoss @ Jan 29 2007, 16:13) Цит...   Jan 29 2007, 15:36
|||- - prottoss   Цитата(dxp @ Jan 29 2007, 19:36) Цитата(p...   Jan 29 2007, 16:02
|||- - 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
|- - 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
||- - zltigo   Цитата(prottoss @ Jan 30 2007, 01:36) Вы ...   Jan 30 2007, 03:27
|||- - prottoss   Цитата(zltigo @ Jan 30 2007, 07:27) Перед...   Jan 30 2007, 03:42
||- - 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 @ 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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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