Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
#1

Безымянный аргумент функции - C++

03.07.2013, 12:48. Просмотров 2398. Ответов 51
Метки нет (Все метки)

функция принимает аргумент, но у него нет имени

C++
1
2
3
4
5
6
7
8
9
10
11
void f(int)
{
    cout << "Hello world!";
}
 
int main()
{
    int n = 10;
    f(n);
    return 0;
}
Добавлено через 13 минут
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Безымянный аргумент функции (C++):

Вычислить значение функции аргумент которой вычисляется из другой кусочно заданной функции - C++
Решите программу то я не знаю как:hysteric: Вычислить значение y в зависимости от выбранной функции \varphi (x), аргумент которой...

Непонятный аргумент функции - C++
Кто-нибудь может подсказать, что принимает такая функция в качестве аргумента? void foo(int (**i)(double)) { ..... }

Не читается аргумент функции - C++
void recursReverse(char* str, size_t len) { static size_t len2 = len; while (len2 &gt; 1) { std::swap(*str, *(str + len2 - 1)...

Передача функции в аргумент - C++
Есть три функции: void MainMenu(); void MainMenu_MilkMenu(); bool ErrorMenu(void (*pf)()); Все прототипы находятся в...

Auto как аргумент функции - C++
Возможно ли объявить параметр функции как auto? void func(auto pt); //...

Класс как аргумент функции - C++
Доброго времени суток:) Набрёл на такой пример в openGL и не могу понять как он робит, подскажите. Вот описание ф-ции: void...

51
Croessmah
Эксперт CЭксперт С++
13415 / 7566 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
03.07.2013, 13:10 #2
Цитата Сообщение от 120° Посмотреть сообщение
но у него нет имени
ну так она же его и не использует просто не именованный параметр к которому так же можно "достучаться"
2
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
03.07.2013, 13:13 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
ну так она же его и не использует
Это-то да.
C++
1
2
3
4
5
6
7
8
9
10
11
void f(int)
{
    cout << "Hello world!";
}
 
int main()
{
    //int n = 10;
    f(NULL);
    return 0;
}
Но нельзя ли каким-либо образом получить из функции переданное таким образом в нее значение?
2
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,923
03.07.2013, 13:13 #4
Цитата Сообщение от Croessmah Посмотреть сообщение
к которому так же можно "достучаться"
как?
на уровне ассемблера представляю
а штатными средствами языка нет
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.07.2013, 23:23 #5
ValeryS, например такой хак http://ideone.com/kJqD9A
1
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,923
03.07.2013, 23:37 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
например такой хак
посмотрел
именно хак, для работы его нужен размер int 4 байта и параметры через стек
примерно 32 битная винда, может Линукс
за Мак не уверен тем более за какие нибудь микроконтроллеры
кстати я это и называю уровень ассемблера
когда ты знаешь как устроен стек, как передаются параметры, т.е много чего "железного"
что на уровне прикладника не всегда известно
например как передать из значение из функции в функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int fnc1()
{
int a=90;
return a;
}
int fnc2()
{
int b;
return b;
}
 
.........
fnc1();
int s=fnc2();
есть вероятность что в s будет 90 ( b ляжет на место a)
но гарантировать никто не может, оптимизатор может легко заменить
return a; на return 90
или вообще выкинуть эти функции
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
04.07.2013, 08:39 #7
Цитата Сообщение от ValeryS Посмотреть сообщение
int 4 байта
32 битная винда
Не очень.
Название: 1111.JPG
Просмотров: 124

Размер: 15.7 Кб
1
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,923
04.07.2013, 08:53 #8
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не очень.
ну видишь ли если в дебиг режиме
про все компиляторы не знаю скажу про Visual C
в дебиг режиме он между аргументами и локальными переменными кладет "подушку безопасности" байт этак на 100
вот в нее видать ты и попал
1
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
04.07.2013, 09:06  [ТС] #9
А как можно просмотреть память от начала функции? Я пытаюсь вот таким способом, но программа не компилится
C++
1
2
3
4
5
void f(int)
{
    for (int i = 0; i <= 20; ++i)
        std::cout << *(f+i) << std::endl;  // выражение должно представлять собой указатель на полный тип объекта
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
04.07.2013, 09:11 #10
ValeryS, это напоминает мне как я по указателю размер массива вычислял.
0
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,923
04.07.2013, 09:18 #11
Цитата Сообщение от 120° Посмотреть сообщение
Я пытаюсь вот таким способом, но программа не компилится
ты пытаешься взять адрес функции ( самой реализации) а не данных
Цитата Сообщение от 120° Посмотреть сообщение
А как можно просмотреть память от начала функции?
ну можно попробовать так
C++
1
2
3
4
5
6
7
void f(int)
{
unsigned char b=0x55;
 
for (int i = -20; i <= 20; ++i)
 printf("%02x ",*(&a+i));
}
printf взял чтобы вывести нормально HEX значения у cout для char не выводит приходится к int приводить
не проверял так мысли вслух
1
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
04.07.2013, 09:47  [ТС] #12
ValeryS, ваша программа не работает. что такое a в цикле? а я уже поспешил поставить вам плюсик

Добавлено через 11 минут
все, разобрался. это вместо a должна стоять b
спасибо
0
Evg
Эксперт CАвтор FAQ
17936 / 6164 / 409
Регистрация: 30.03.2009
Сообщений: 16,925
Записей в блоге: 27
04.07.2013, 09:51 #13
Цитата Сообщение от Tulosba Посмотреть сообщение
ValeryS, например такой хак http://ideone.com/kJqD9A
Это не хак, а $рань господня, которая будет работать исключительно на твоём компиляторе, т.к. твой "хак" ты подогнал под поведение конкретно своего компилятора
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
04.07.2013, 09:52 #14
когда ты знаешь как устроен стек, как передаются параметры, т.е много чего "железного"
От размера int'а данный пример не зависит, а вот от calling convetions зависит, железного тут мало.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.07.2013, 10:32 #15
Цитата Сообщение от Evg Посмотреть сообщение
Это не хак, а $рань господня, которая будет работать исключительно на твоём компиляторе, т.к. твой "хак" ты подогнал под поведение конкретно своего компилятора
Уважаемый Evg, не горячитесь так. Никто не утверждал, что этот код будет переносимым. Если Вам известны какие-то иные способы получения значения безымянного параметра, было бы интересно посмотреть.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 10:32
Привет! Вот еще темы с ответами:

Локальные переменные в функции и её аргумент - C++
Привет! Пишу функцию перевода десятичного числа в текст (не обсуждайте зачем и правильно ли я делаю) Суть такова, начало функции: ...

Аргумент функции - массив строк - C++
есть массив строк string *conns = new string; нужно сделать функцию, которая его бы изменяла void func( ??? ) {}

Опциональный ссылочный аргумент функции - C++
Некоторые аргументы функции можно сделать опциональными, просто поставив значение по умолчанию, а затем проверяя, изменилось ли оно : ...

Аргумент argv в функции main() - C++
Здравствуйте. Возникли некоторые непонимания при работе с аргументом argv и указателями в целом. Мне сказали, что, при передаче...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
04.07.2013, 10:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru