prottoss 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба Послушайте, уважаемый, у меня было уже ...дцать поводов перейти на оценку Вашего скилла в обсуждаемом вопросе, но я от этого воздержался и в конце концов доброжелательно посоветовал Вам восполнить пробелы в знаниях по языку. Вы же вместо этого просто начали хамить. Что ж, если угодно оставаться в воинствующем неведении, это дело хозяйское, я как мог старался помочь и старался быть корректным. С меня достаточно, жизнь Вас лучше научит (когда придете устраиваться на работу и будете отвечать на эти вопросы на продемонстрированном уровне). Всего Вам.Извиняюсь, если я обидел Вас своими репликами В функцию были переданы значения массива путем помещения их (значений) в структуру, но не массив. Массив в С/С++ нельзя передать по значению. Масло масленное. Правильно, массив нельзя, структуру можно. Теперь, если мы адрес массива приведем к типу структуры мы, фактически, передаем массив в функцию, точнее его копию. И, если и с наружи и внутри функции все знают, что под оберткой передаваемой переменой, то все хлопают в ладоши - массив передан по значению. Еще раз повторюсь. Функция принимает по значению структуру, но мы подсунули ей массив, под видом структуры. И еще раз повторю начало нашего никчемного спора: prottoss: И даже массив мона))) Ежели правильна приготовить dxp: Покажите как? Как передать массив по значению (в качестве аргумента) в функцию? prottoss: ...показываю... dxp: Здесь передается не массив, а структура... Функция принимает в качестве аргумента структуру, но я, правильно его приготовив, скормил его функции, всего то :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба Какие указатели? "Какой такой павлин-мавлин?"(с) Вообще то говорилось, что структура попадает в функцию по значению, попробуйте присвоить ей { 0 } Читайте по губам что спрашивалось, и на что был дан ответ:Вам необходимо, что бы все поля данной структуры были равны, допустим, нулю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба Какие указатели? "Какой такой павлин-мавлин?"(с) Вообще то говорилось, что структура попадает в функцию по значению, попробуйте присвоить ей { 0 } Читайте по губам что спрашивалось, и на что был дан ответ:Вам необходимо, что бы все поля данной структуры были равны, допустим, нулю. Здесь подразумевалось, что структура передается в функцию, а не объявляется внутри функции Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба protoss прекрасно понимают о чем говорят и что я имею ввиду. Тогда, что с вашей точки зрения передается здесь: void fun(U8 *param, U16 size) { ... работаем с массивом param вместо sizeof используем переданный size } U8 array1[100]; fun( array1, sizeof(array1) ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба protoss прекрасно понимают о чем говорят и что я имею ввиду. Тогда, что с вашей точки зрения передается здесь: void fun(U8 *param, U16 size) { ... работаем с массивом param вместо sizeof используем переданный size } U8 array1[100]; fun( array1, sizeof(array1) ); Здесь передается указатель, и его размер (указателя) в байтах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dryadae 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба protoss прекрасно понимают о чем говорят и что я имею ввиду. Тогда, что с вашей точки зрения передается здесь: void fun(U8 *param, U16 size) { ... работаем с массивом param вместо sizeof используем переданный size } U8 array1[100]; fun( array1, sizeof(array1) ); Здесь передается указатель, и его размер (указателя) в байтах Размер указателя всегда один На 32-битной архитектуре он равен 4-м байтам, на 16-битной - двум. Без вариантов :) :) :) Кроме случая far. P.S. Размер указателя на указатель - тоже :glare: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 30 января, 2007 Опубликовано 30 января, 2007 · Жалоба Здесь передается указатель, и его размер (указателя) в байтах Сорри :) размер массива :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 31 января, 2007 Опубликовано 31 января, 2007 · Жалоба Здесь передается указатель, и его размер (указателя) в байтах Сорри :) размер массива :) Верно. Указатель и размер. Указатель в C это есть безразмерный массив (за исключением указателя на void) Относительно моего примера. Массив мы передали в функцию - нет он остался где-то снаружи. Работать внутри функции с этим массивом можем - да. Как с массивом - да. В чем же отличие от передачи структуры - в том, что структура передается через стек и будет локальной переменной внутри функции, т.е. все ее поля будут продублированы и при изменении ее полей внутри функции оригинал не изменится. После выхода из функции эта структура автоматически уничтожится (Вы уже в курсе, даже продемонстрировали asm листинги). Массив при передаче в функцию через указатель никуда не копируется и работаем мы сразу с оригиналом. При передаче через указатель неудобство лишь одно - нельзя узнать размер массива, поэтому его (размер массива) требуется передавать отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться