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

 
 
> Возврат нескольких аргументов
John851
сообщение Jul 6 2010, 17:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Добрый вечер,

забыл как возвращать сразу несколько аргументов из процедуры...

я пробовал что то типа

void func (char &arg1, char &arg2) {
.....
arg1=val1;
arg2=val2;
}

но компилятор такого не принял...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
John851
сообщение Jul 6 2010, 18:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



эм дак вот и обращаюсь сюда за знаниями, все только и могут посылать в буквари.. Я передаю в качестве аргументов элементы массива типа char, как мне известно - имя массива со смещением это и есть указатель - ок пробуем, пишет: ../SLAVE.c:110: warning: passing argument 2 of 'start_single' makes pointer from integer without a cast - о чем здесь речь? пробую преобразовать указатели к типу char: (char *) mas[0] - ок пробуем, пишет: ../SLAVE.c:110: warning: cast to pointer from integer of different size. Вы бы не могли пояснить что происходит

Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 7 2010, 01:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(John851 @ Jul 7 2010, 00:05) *
как мне известно - имя массива со смещением это и есть указатель
Неверно. Только само имя массива может служить адресом. Имя массива с указанием индекса (смещения) как аргумент функции это передача значения элемента массива. Если вы хотите передать его (элемента массива) адрес через указатель, то нужно дополнить операцией извлечения адреса. Потому, что при индексации компилятором учитывается размер элементов массива и способ доступа к ним.
Прототип функции должен выглядеть как
Код
void foo (char *ptr1, char *ptr2);

Вызов функции
Код
foo (&mas[4], &mas[8]);

А вот следующие две записи действительно дают идентичный результат
Код
foo (mas, &mas[10]);

Код
foo (&mas[0], &mas[10]);

При несовпадении типов указателей и необходимости приведения их типов нужно делать это явным образом
Код
foo ((char *)&mas[0], (char *)&mas[8]);

Если же, например, требуется обработать элементы массива другого типа (например, побайтовая обработка массива 32-х разрядных чисел), то так
Код
foo (&((char *)mas32)[0], &((char *)mas32)[8]);

В последнем случае индекс указывает на смещение в байтах, т.к. указатель предварительно к "байтовому" типу char приведен. Слово "байтовому" взято в кавычки по причине того, что в соответствии со стандартом СИ нет однозначной привязки типа char к байту (8-бит).
Так что zltigo вполне справедливо отсылает вас к букварю wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- John851   Возврат нескольких аргументов   Jul 6 2010, 17:25
- - GetSmart   Цитата(John851 @ Jul 6 2010, 22:25) void ...   Jul 6 2010, 17:38
- - John851   так я тоже делал, токо вот потом не смог разобрать...   Jul 6 2010, 17:49
|- - zltigo   QUOTE (John851 @ Jul 6 2010, 20:49) вообщ...   Jul 6 2010, 17:55
|- - GetSmart   Цитата(John851 @ Jul 6 2010, 22:49) так я...   Jul 6 2010, 18:07
|- - zltigo   QUOTE (John851 @ Jul 6 2010, 21:05) эм да...   Jul 6 2010, 18:09
- - John851   ЦитатаА вот при вызове делать так func (&xxx[x...   Jul 6 2010, 18:10
|- - sonycman   Цитата(John851 @ Jul 6 2010, 22:10) К сож...   Jul 6 2010, 21:12
- - John851   ЦитатаЭто обязательно. Базис для общения, а то даж...   Jul 6 2010, 18:11
|- - haker_fox   QUOTE (John851 @ Jul 7 2010, 03:11) что в...   Jul 7 2010, 02:37
- - dxp   Цитата(John851 @ Jul 7 2010, 00:25) void ...   Jul 7 2010, 02:38
|- - demiurg_spb   Цитата(John851 @ Jul 6 2010, 21:25) забыл...   Jul 7 2010, 14:36
|- - zltigo   QUOTE (demiurg_spb @ Jul 7 2010, 17:36) А...   Jul 7 2010, 14:40
|- - demiurg_spb   Цитата(zltigo @ Jul 7 2010, 18:40) просто...   Jul 7 2010, 14:46
- - sigmaN   А dxp всем советует: ЦитатаВключите режим С++, и к...   Jul 7 2010, 17:12


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

 


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


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