Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Как это читается по-русски

22.10.2013, 01:55. Показов 5112. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
int MyFunc(...)
{
  cout<<MyFunc[2]; //это
  //cout<<MyFunc    //это
  return 0;
}
 
 
int main() {
  MyFunc(100);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2013, 01:55
Ответы с готовыми решениями:

Как это читается
(*r).sled r - &gt; sled Между ними нет разницы

Re: Как это читается по-русски
Нужны администраторы групп ВКонтакте. Зарплата 300 рублей в час. График посменный 4 часа в сутки. Выплаты еженедельно. Обязанности -...

На сколько это по-русски?
Проверьте, пожалуйста: .

35
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.10.2013, 15:52
Студворк — интернет-сервис помощи студентам
MyFunc и MyFunc[2] для вывода - одно и то же, так как имеют одинаковый тип - указатель на функцию определенного типа, который неявно приведется к bool. Просто MyFunc[2] содержит адрес, смещенный на 2 размера указателя от MyFunc. Поэтому мы можем вызвать MyFunc() и все будет норм, но при вызове MyFunc[2]() мы получим Runtime Error.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
23.10.2013, 16:14
попробовал написать в VS2008
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// pritfFunc.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
int MyFunc(...)
{
 // printf("%p",(bool*)MyFunc[2]); // ошибка  error C2109: для индекса требуется массив или указатель
 // std::cout<<MyFunc[2]; // то же самое
    
    printf("\nprintf MyFunc\n"); 
    std::cout<<MyFunc<<std::endl;
    printf("%p\n",MyFunc );   //это
  return 0;
}
 
int MyFunc1(int a)
{
   printf("\nprintf MyFunc1\n"); 
   std::cout<<MyFunc1<<std::endl;
    printf("%p\n",MyFunc1 );   //это
  return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{  
   printf("\nprintf Main Begin \n"); 
   printf("%p\n",MyFunc );
   printf("%p\n",MyFunc1 );  
    MyFunc(100);
    MyFunc(100);
    printf("\nprintf Main End\n"); 
   printf("%p\n",MyFunc );
   printf("%p\n",MyFunc1 );  
    return 0;
}
и получил вот что
printf Main Begin
013410FA
013411CC

printf MyFunc
013410FA
013410FA

printf MyFunc1
013410FA
013410FA

printf Main End
013410FA
013411CC
причем при каждом запуске цифры разные
трудно назвать адресами функций(тем более что печать внутри разных функций дает один адрес)
Может это стек
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
23.10.2013, 16:19
Цитата Сообщение от ValeryS Посмотреть сообщение
тем более что печать внутри разных функций дает один адрес
может дело в самой печати?
тогда как же передают функции в качестве параметров, одинаковыми эти "указатели" быть не могут уж точно
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
23.10.2013, 19:02  [ТС]
Если кто-то врубился и думает, что я и сам всё понял, то нет. Я пока еще нет. Я пока еще вообще ничего не понял. Да и с англ. я плохо дружу.

Еще мне интересен такой момент
C++
1
2
3
4
5
6
7
int MyFunc(...)
{
   int MyFunc = 333;
   double MyFunc =777;
 
  return 0;
}
т.е. MyFunc я могу использовать и не объявляя как переменную, но при этом объявить переменную с таким именем и объявить еще одну с таким же уже не получается. Хотя объявить одну допускается.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.10.2013, 19:20
Цитата Сообщение от daslex Посмотреть сообщение
т.е. MyFunc я могу использовать и не объявляя как переменную, но при этом объявить переменную с таким именем и объявить еще одну с таким же уже не получается. Хотя объявить одну допускается.
MyFunc - это никак не переменная, это имя функции, которое в выражениях неявно может приводиться к адресу функции. Имена могут скрываться во вложенной области - int MyFunc скрывает имя функции, отныне имя MyFunc ссылается на переменную типа int. Но в одной и той же области не может быть определено несколько переменных с одним именем. Поэтому потом double MyFunc писать нельзя.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
23.10.2013, 20:10  [ТС]
Осталось разобраться зачем преобразование к bool нужно.
я попробовал, не подошло для понимания.
C++
1
2
3
4
5
6
void MyFunc(){}
 
int main()
{
    std::cout<<MyFunc<<" = "<<int(MyFunc)<<"\n";
}
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.10.2013, 21:12
Цитата Сообщение от daslex Посмотреть сообщение
Осталось разобраться зачем преобразование к bool нужно.
Ну это тоже в принципе понятно. Нам нужно неявное преобразование в bool для проверки в if.
C++
1
2
3
4
5
6
7
8
9
10
11
typedef void (*Foo)(int);
 
void check(Foo f)
{
    // нужно проверить:
    // вдруг нам передали нулевой указатель
    if (f) // тут неявное преобразование из указателя на функцию в bool
      f(3);
    else
      cout << "null";
}
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
23.10.2013, 22:04  [ТС]
тут параметр-то причем?
указатель в качестве параметра будет иметь другой адрес.
и если имя функции- это имя функции и не переменная
указатель - это не имя функции и является переменной.

меня интересует преобразование имени функции, а не проверка указателя как переменной.

Добавлено через 1 минуту
в вашем пример ключевой check
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.10.2013, 23:12
Цитата Сообщение от daslex Посмотреть сообщение
меня интересует преобразование имени функции, а не проверка указателя как переменной.
Так я про это и написал.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
typedef void (*Foo)(int);
void foo(int) {}
 
void check(Foo f)
{
    // нужно проверить:
    // вдруг нам передали нулевой указатель
    if (f) // тут неявное преобразование из указателя на функцию в bool
      f(3);
    else
      cout << "null";
}
 
int main() {
    check(foo);
    return 0;
}
Так понятней? Нам нужно уметь преобразовывать имя функции (что в выражении является указателем) в bool.
f и foo указывают на одно и то же.

Upd
На всякий случай: преобразование в bool относится не только к имени функции, оно относится ко всему, что имеет тип указателя на функцию. Преобразование имени функции в bool - лишь частный случай более общего преобразования из указателя на функцию в bool.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
23.10.2013, 23:42  [ТС]
нет. непонятно. мне и первый код понятен. но не вижу тесной связи своего вопроса о функции с параметрами функции, даже несмотря на то, что они указывают на одно и то же.
это на притягивание за уши похоже между прочим.

вы проверяете параметр на истинность. Этот параметр может быть и 0 и 1.
отличие имени функции от указателя (который приходит как параметр) в том, что оно всегда, всегда только 1.
насколько я понял.

Добавлено через 14 минут
это если сделали, значит с какой-то целью.
вот и хотелось бы разобраться с какой целью вообще имя функции преобразовывать в bool, да и в 1 всегда.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.10.2013, 23:45
Функция не единица. Распишу по шагам, что происходит в if.
1) имя функции преобразуется в указатель
2) указатель преобразуется в bool
Например для переменных-указателей мы начинаем сразу с пункта 2.
Для имен функций вначале выполняется шаг 1. Так как полученный указатель никогда не будет нулевым, то преобразование его в bool всегда будет давать true, поэтому оператор вывода показывает 1.

И еще раз повторю - имя функции не преобразуется в bool. Оно преобразуется в указатель (который никогда не NULL). А уже указатель - в bool (это определено для любых указателей). А так как указатель будет никогда не NULL, то bool будет всегда true. А оператор вывода выводит true как единицу.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 23:54
Цитата Сообщение от daslex Посмотреть сообщение
отличие имени функции от указателя (который приходит как параметр) в том, что оно всегда, всегда только 1.
насколько я понял.
Фукция всегда имеет не нулевой адрес, поэтому и true (1).
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
23.10.2013, 23:57  [ТС]
я успел исправить функцию на имя функции.

Не по теме:

Цитата Сообщение от ct0r Посмотреть сообщение
И еще раз повторю
в первые от вас это слышу :D



Так-то теперь я всё понял.
0
24.10.2013, 00:02

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
в первые от вас это слышу
Ну может я и не умею объяснять, зато я терпеливый :)

0
24.10.2013, 00:07  [ТС]

Не по теме:

ct0r, вы сразу и написали об этом. (то, что в еще раз повторю). я пошутил, что впервые слышу.
Просто вам не достаточно полно удалось сказать с первой попытки. Вот и вышло, что я не понимал о чем речь.

0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 01:01
Цитата Сообщение от daslex Посмотреть сообщение
я успел исправить функцию на имя функции.
Имя функции - это её адрес.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2013, 01:01

Fretting precession - как по-русски?
Если я не ошибаюсь, что в русской терминологии термин &quot;прецессия&quot; употреблется только в применении к явлению прецессии гироскопа. А...

Adsense - как сделать по-русски?
У меня проблема: Гугл Адсенс вставляет свою рекламу на мой сайт на английском языке. Хотя при регистрации язык указывала русский.

Как прописать строки по- русски
Как прописать строки по-русски, чтобы при выводе на экран не было иероглифов?

Можно ли как определить как писать формулы в яцейки из VBA по русски или английски?
в общем проблема в том можно ли как определить как писать формулы в яцейки из VBA по русски или английски, или как сожно сделать...

Как по-русски обозвать назначение члена?
typedef struct _CONSOLE_SELECTION_INFO { DWORD dwFlags; COORD dwSelectionAnchor; SMALL_RECT srSelection; }...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru