(строго говоря, возвращаемое функцией значение по сути тоже является её аргументом, просто записанным чуть иначе для удобного восприятия. Просто в математике под функцией понимается зависимость некоторой величины от одного-нескольких аргументов, вот и в C реализовали такую штуку как тип функции.)
Вопросы по С/С++ (СИ)
Да, но результат такого рода будет только один и того типа, которым объявлена функция, и не затронет аргументы в скобках.
(строго говоря, возвращаемое функцией значение по сути тоже является её аргументом, просто записанным чуть иначе для удобного восприятия. Просто в математике под функцией понимается зависимость некоторой величины от одного-нескольких аргументов, вот и в C реализовали такую штуку как тип функции.)
(строго говоря, возвращаемое функцией значение по сути тоже является её аргументом, просто записанным чуть иначе для удобного восприятия. Просто в математике под функцией понимается зависимость некоторой величины от одного-нескольких аргументов, вот и в C реализовали такую штуку как тип функции.)
- Реклама
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Ох. Ну почему все хронически путают C и C++?Язык С++, ATMEL Studio 6, ATmega32
Mika, пока Вы пытаетесь писать на самом обычном ANSI C.
C++ - это, чтобы понятно, классы, шаблоны, наследование и еще куча умных слов. Вы же всего-то пытаетесь побороть передачу аргументов.
Так, до меня все уже написали, но я кратенько резюмирую. Без объяснений, ибо все уже было объяснено.
0. Функция всегда возвращает только одно значение.
1. При простом вызове в функцию передаются копии аргументов, которые уничтожатся после вызова.
Код: Выделить всё
int foo(int a, int b, int c)
{
a++;
b--;
c+=2;
return (a + b + c);
}
void main(void)
{
int x,y,z,g;
x=1;
y=2;
z=3;
g=foo(x,y,z);
/*
Тут имеем:
x==1, y==2, z==3
g==8.
*/
}
Код: Выделить всё
int bar(int *a, int *b, int *c)
{
(*a)++;
(*b)--;
(*c)+=2;
return ((*a) + (*b) + (*c)); //Операция разыменования имеет наивысший приоритет, но не стесняйтесь расставлять скобки. Хуже не будет.
}
void main(void)
{
int x,y,z,g;
x=1;
y=2;
z=3;
g=bar(&x,&y,&z);
/*
Тут имеем:
x==2, y==1, z==5
g==8.
*/
}
Код: Выделить всё
typedef struct {
int a;
int b;
int c;
} my_struct;
void foo2(my_struct *st)
{
st->a++;
st->b--;
st->c+=2;
}
void main(void)
{
my_struct stc;
stc.a=1;
stc.b=2;
stc.c=3;
foo2(&stc);
/*
Тут имеем
stc.a==2, stc.b==1, stc.c==5
*/
}
Код: Выделить всё
int a,b,c;
int bar2(void)
{
a++;
b--;
c+=2;
return (a + b + c)
}
void main(void)
{
int g;
a=1;
b=2;
c=3;
g=bar2();
/*
Тут имеем
a==2, b==1, c==5
g==8.
*/
}
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Парни, ещё раз огромное спасибо! Свою задачу я на данный момент я поборол (делал что-то вроде часов шахматистов). Но код выглядит очень некрасиво, это понятно даже мне
То, что вы написали, я конспектирую
Но передачу в функцию адресов на переменные я вчера пробовал и работать не стало. Щас у меня нет возможности попрограммировать МК, который стоит на плате с LSD дисплеем, на который было бы удобно выводить результаты. А на след неделе напишу чистую программку, в которой будет только исследуемая (ну в плане моих экспериментов
) функция и вывод полученных значений на дисплей. Надеюсь, что в следующем посте будут не вопросы, а ответы
Спасибо!
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
Твою мать, вот это надо было так опечататься на форуме технарей 
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
- Реклама
частенько такие казусы вижу, аж бррр
думаю если знать как расшифровывается аббревиатура (Liquid Crystal Display), каких ошибок ну никак не получится сделать
думаю если знать как расшифровывается аббревиатура (Liquid Crystal Display), каких ошибок ну никак не получится сделать
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Да я знаю, в том-то и дело
Просто тупанул
Мне когда YS указал на это, я сначала не понял, в чём подвох, и начал проверять написанное на правильность 
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
я бы так не говорил - структура, перечисление, массив...YS писал(а):0. Функция всегда возвращает только одно значение.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
после вызова(во время выполнения функции) они вполне себе живы и существуют внутри этой функцииYS писал(а):1. При простом вызове в функцию передаются копии аргументов, которые уничтожатся после вызова.
имелось ввиду после ВОЗВРАТА(выхода) из вызываемой функции
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
еще есть массивы, перечисления...YS писал(а):3. Когда передается 100500 переменных, объединенных общей идеей, удобно пользоваться структурами.
все зависит от конкретного случая и типа переменных
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
unalex, ну вы прямо по всем пунктам придрались. YS все правильно написал. Enum-ы для передачи данных группой не получится использовать. А массив для этого - какое-то извращение 
ЗЫ. Не создавайте несколько сообщений подряд. Используйте уникальную возможность отредактировать свое последнее сообщение для добавления контента.
ЗЫ. Не создавайте несколько сообщений подряд. Используйте уникальную возможность отредактировать свое последнее сообщение для добавления контента.
only pure true norwegian blackx 
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Э-э-э, все это возвращается/изменяется по указателю. Так что, по факту, значение одно. Вернуть больше одного в конструкции return - технически невозможно (в Си, разумеется; в Lua, например, можноя бы так не говорил - структура, перечисление, массив...
Это да, они существуют в стеке и пропадают после завершения вызова функции. Ну и, конечно, строго говоря они не уничтожаются немедленно и целенаправленно, просто стек затирается новыми данными по мере использования...они вполне себе живы и существуют внутри этой функции
имелось ввиду после ВОЗВРАТА
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Всем привет!
Надеюсь не за пинаете )) Тут пытаюсь учиться прогать на C# и столкнулся с проблемой. В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную". Так вопрос в том, а как в одной форме разместить массив кнопок и текст_бокс? Класс матрицы кнопок CellButtons сделать наследником главной формы MyForm?
Вот такая у меня структура кода:
При такой структуре в проекте только текст_бокс.
Надеюсь не за пинаете )) Тут пытаюсь учиться прогать на C# и столкнулся с проблемой. В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную". Так вопрос в том, а как в одной форме разместить массив кнопок и текст_бокс? Класс матрицы кнопок CellButtons сделать наследником главной формы MyForm?
Вот такая у меня структура кода:
Код: Выделить всё
public static void Main()
{
MyForm Calc = new MyForm();
Application.Run(Calc);
}
class MyForm : Form
{
public MyForm()
{
TextBox txtBox = new TextBox();
txtBox.Parent = this;
}
}
class CellButtons : MyForm
{
// куча быдлокодинга (размещаем кнопки матрицей 3*3)
}Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
это почему же?blackx писал(а):А массив для этого - какое-то извращение
типичный случай - массив данных, требующий сортировки
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
наверное координаты и пр. для кнопки ввести надо, дизайнер так делает:Chip115 писал(а): Тут пытаюсь учиться прогать на C# и столкнулся с проблемой. В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную"
Код: Выделить всё
this.button1 = new System.Windows.Forms.Button();
..........
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(304, 191);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Старт";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
Все есть )) Просто тут код не стал приводить. Координаты и прочее, что касается кнопок формируются в методе CellButtons. По отдельности работают оба метода: текс_бокс и CellButtons. А вот запихнуть их в одно окно ума не хватает 
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Почему это по указателю? Можно спокойно вернуть ту же структуру по значению. Передана она в общем случае будет через стек. Поэтому, если под "одним" возвращаемым значением подразумевается одно машинное слово, то это не верно: можно вернуть данные любого размера. Если же под этим подразумевается одно "логическое значение" , то действительно, две отдельные структуры не возвратить, придется их объединять в одну.YS писал(а):Э-э-э, все это возвращается/изменяется по указателю.
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Chip115
Конечно, из твоего обрезка кода ничего непонятно, но у формы есть свойство Controls, которое представляет собой коллекцию дочерних объектов. Добавляешь туда свои элементы управления.
Конечно, из твоего обрезка кода ничего непонятно, но у формы есть свойство Controls, которое представляет собой коллекцию дочерних объектов. Добавляешь туда свои элементы управления.
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Именно, две структуры уже никак. Только передавать в функцию указатели на них. Через return - никак две не возвратить. Опять же, в C. В том же Lua - вполне можно.Если же под этим подразумевается одно "логическое значение" , то действительно, две отдельные структуры не возвратить, придется их объединять в одну.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 75
- Зарегистрирован: Чт авг 29, 2013 08:02:24
у меня тупой вопрос =|
скоро истечёт 30 дневная ознакомительная версия IAR (2дня), сегодня её удалил, скачал софф сайта, почистил реестр claenerom(думал спасёт) поставил обратно, видит старую лицензию, новую 30дневную соответветственно незарегистрировать и не поставить...как быть?
Пиратки нельзя, ибо убьют при проверке..
скоро истечёт 30 дневная ознакомительная версия IAR (2дня), сегодня её удалил, скачал софф сайта, почистил реестр claenerom(думал спасёт) поставил обратно, видит старую лицензию, новую 30дневную соответветственно незарегистрировать и не поставить...как быть?
Пиратки нельзя, ибо убьют при проверке..


