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

 
 
> в чем прелесть указателей ?
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:15
Сообщение #5


Гуру
******

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



Цитата(defunct @ Jan 30 2007, 04:46) *
Цитата
Была задача, передать массив в функцию, как аргумент - передали

То что вы засунули внутрь функции
void fun(array_as_param param).. ,
массивом назвать нельзя...
Проверить легко (обращение внутри функции):
param[0] = 0;
даст ошибку, а это значит, что не массив был передан в функцию.
Это ровным счетом ничего не значит, потому что я могу сделать приведение к нужному мне типу. В конце концов, программу пишу я, и только я точно знаю что у меня внутри функции, а что с наружи. И если мне вздумалось передать массив как аргумент, то я из кожи вылезу но сделаю это smile.gif


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


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(prottoss @ Jan 30 2007, 01:15) *
И если мне вздумалось передать массив как аргумент, то я из кожи вылезу но сделаю это smile.gif

Придется сильно попотеть smile.gif для того чтобы сделать так, как в используемом языке невозможно сделать. smile.gif

ЗЫ
Прямо какое-то обострение у контингента началось, везде дон кихоты от С с красными дипломами.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 30 2007, 12:15
Сообщение #7


Гуру
******

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



Цитата(SpiritDance @ Jan 30 2007, 15:42) *
Цитата(prottoss @ Jan 30 2007, 01:15) *
И если мне вздумалось передать массив как аргумент, то я из кожи вылезу но сделаю это smile.gif
Придется сильно попотеть smile.gif для того чтобы сделать так, как в используемом языке невозможно сделать. smile.gif
А потеть и не надо. Попробую еще раз объяснить. Есть определенный мною тип данных:

Код
typedef struct{

    UCHAR array[128];

} int128 /* к примеру */


Есть переменные, но они не приведены к данному типу:

Код
UCHAR a[128];

UCHAR b[128];


И есть функция, и не важно, что у нее внутри:

Код
void math128(int128 arg1, int128 arg2);


Я легко передаю в функцию два массива, приведя их к типу int128:

Код


.....

math128(*(int128 *)&a), *(int128 *)&b));

.....
Что я передал в функцию??? Два массива - a и b

Цитата(SpiritDance @ Jan 30 2007, 15:42) *
ЗЫ
Прямо какое-то обострение у контингента началось, везде дон кихоты от С с красными дипломами.
Не надо флудить и злорадно хихикать smile.gif Если у Вас есть что сказать по теме, говорите, если нет - тихо наблюдайте


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


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(prottoss @ Jan 30 2007, 12:15) *
Не надо флудить и злорадно хихикать smile.gif Если у Вас есть что сказать по теме, говорите, если нет - тихо наблюдайте

Вот что точно не надо так это говорить другим что им делать.
А теперь по теме. Рискну ответиь за dxp.

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


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 30 2007, 14:47
Сообщение #9


Гуру
******

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



Цитата(SpiritDance @ Jan 30 2007, 18:40) *
Цитата(prottoss @ Jan 30 2007, 12:15) *

Не надо флудить и злорадно хихикать smile.gif Если у Вас есть что сказать по теме, говорите, если нет - тихо наблюдайте

Вот что точно не надо так это говорить другим что им делать.
А теперь по теме. Рискну ответиь за dxp.

В С всегда можно предать пременную по значению, что вы и продемонстрировали. Но вы никогда не заставите компилятор предать в функцию массив пременных.
А я уже заставил - два раза показывал. Объявил массив array1 и передал его в качестве параметра функции fun. И не надо мне говорить - правильно это или не правильно и как я это сделал. Примите просто как факт - ЭТО СДЕЛАННО.


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


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(prottoss @ Jan 30 2007, 14:47) *
Примите просто как факт - ЭТО СДЕЛАННО.

Суть в том что Вы сами до конца не понимаете что сделали с точки зрения семантики языка. Функция fun ну или math128 принимают в качестве значений не массивы, а пременные, определенного вами типа. Ну да Бог с Вами.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
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   Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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