С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему?

31.03.2013, 23:51. Показов 2099. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
//Тут некоторый код
 
void foo(X* pX) {printf ("%x\n", pX);}; 
void bar(Y* pY) {printf ("%x\n", pY);}; 
int main() 
{ 
 //Тут тоже некоторый код
 foo(pA); 
 bar(pA); 
 //И тут тоже некоторый код
}
А вот вывод:
3e2478
3e247c
Задание: восстановить весь код, чтобы так всё и было. Вроде передаётся одно значение (pA) а в функциях оно почему-то разное
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2013, 23:51
Ответы с готовыми решениями:

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)?
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Почему код один, а значения на каждых компиляторах разные?
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); int variable = 1; int a =...

Правильно ли передается параметр в функции
Мне нужно получить сид текущего юзверя по принцупу передачи строки в функцию. Короче додумался до этого: DWORD GetUserSid(LPSTR *sid) { ...

20
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
01.04.2013, 00:17
Очень интересно. А можно использовать многопоточность? Эх. Никогда с таким не сталкивался. Может надо переопределить фунцию привидения к void * указателю? Ну или к указателю на pX или pY
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.04.2013, 00:20
Можно так:
1
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
01.04.2013, 00:48
Почему-то не работает :'-) Но я хоть близок к истине?
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
#include <stdio.h>
 
class Y
{
 
};
 
class X
{
public:
   operator Y*() {return (Y*)0x3e247c;};
};
 
 
 
void foo(X* pX) {printf ("%x\n", pX);};
void bar(Y* pY) {printf ("%x\n", pY);};
 
int main()
{
 X *pA = (X*)0x3e2478;
 
 foo(pA);
 bar(pA);
 // И тут тоже некоторый код
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.04.2013, 00:56
Цитата Сообщение от Buckstabue Посмотреть сообщение
Но я хоть близок к истине?
Конечно можно придумать кучу вариантов решения. А так, нет - ваш вариант не будет работать.
Желательно копать в сторону полиморфизма.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.04.2013, 01:23  [ТС]
Цитата Сообщение от Buckstabue Посмотреть сообщение
А можно использовать многопоточность?
В моём ответе многопоточности нет, но если умело примените, ответ будет засчитан.
Croessmah, чё-то у вас всё тёмное там; вы так просто код напишите и всё.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.04.2013, 01:24
Цитата Сообщение от kravam Посмотреть сообщение
Чё-то у вас всё тёмное там вы так просто код напишите и всё.
тогда пропадет смысл темы. Я предложил лишь один вариант. Сейчас в ЛС скину )
0
4 / 8 / 0
Регистрация: 08.02.2013
Сообщений: 52
01.04.2013, 01:34
Тут идея решения, запрятал чтоб посмотрели только те, кому совсем не терпится.
Кликните здесь для просмотра всего текста
Классы X и Y в разных пространствах имён, соответственно члены классов, передаваемые в функцию, могут иметь одно имя при разных фактических значениях. Код лениво писать. =)


Добавлено через 4 минуты
Croessmah, поясните пожалуйста идиоту, как тут спойлер работает? кликаю - и нифига, смысл спойлера уходит. Предположительно где-то там fieldset должно быть, но экспериментировать надоело.
0
01.04.2013, 01:38

Не по теме:

Цитата Сообщение от Stranger777 Посмотреть сообщение
кликаю - и нифига
Обновите страницу.

1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.04.2013, 01:42
Цитата Сообщение от Stranger777 Посмотреть сообщение
Тут идея решения, запрятал чтоб посмотрели только те, кому совсем не терпится.
Ну вы тут совсем напутили >_> Если я правильно понял то, что вы хотели донести - то это работать не будет.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.04.2013, 01:42  [ТС]
Stranger777, сомневаюсь. Дело в том, что имя-то одно , но коль скоро оно принадлежит разным класса, его надо как-то квалифицировать, причём делать это ОДНОЗНАЧНО, ну например:
C++
1
2
foo(X::pA); 
bar(Y::pA);
а это уже явно два разных pA

+++++++++++++++++++++++++++++++++++

Croessmah, скинул мне в личку один из правильных ответов, мы его если чё опубликуем. Мой ответ кардинально разнится от ответа Croessmah, то есть не просто косметически, но принципиально. Вот имеем уже два ответа.
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2013, 02:10
kravam, а в тех местах, где помечено комментом, код должен быть обязательно?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.04.2013, 02:24  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
//Тут некоторый ОБЯЗАТЕЛЬНЫЙ код
 
void foo(X* pX) {printf ("%x\n", pX);}; 
void bar(Y* pY) {printf ("%x\n", pY);}; 
int main() 
{ 
 foo(pA); 
 bar(pA); 
 //Тут необязательный код для подбирания соплей, типа память освободить, ноль вернуть.
}
++++++++++++++++++++++++++++++++++++++++ +++++

Croessmah прислал мне уже два принципиально разных варианта, а у меня есть третий.
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2013, 02:26
kravam, да, комменты на это наводят. А ДО вызовов?
И вообще, тут главное только то, чтобы вышли разные значения?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.04.2013, 02:28
что за тайны мадридского двора?
Кликните здесь для просмотра всего текста
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
37
38
39
40
41
42
43
44
#include <iostream>
 
class X
{
   public:
   virtual ~X()
   {
   }
};
 
class Y 
{   
   public:
   virtual ~Y()
   {
   }
};
 
class Z : public X, public Y
{
   public:
   virtual ~Z()
   {  
   }
};
 
 
void foo(X* pX) 
{
   std::cout << pX << std::endl;
}
 
void bar(Y* pY) 
{
   std::cout << pY << std::endl;
}
 
int main() 
{ 
   Z z;
   Z* pA = &z;
   foo(pA); 
   bar(pA);
}
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.04.2013, 02:30  [ТС]
Я там подкорректировал, но это для простоты. Условие из первого поста вполне корректно, просто оно чуть-чуть сложнее минимально необходимого для решения задачи. Да, надо чтобы разные числа вывелись и всё.
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2013, 02:32
Просто под этот код можно много фигни понаписать, типа этой, но вряд ли это за решение сойдет
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#define pA (int*)(rand()%10)
typedef int X;
typedef int Y; 
 
void foo(X* pX) {printf ("%x\n", pX);}; 
void bar(Y* pY) {printf ("%x\n", pY);};
 
int main() 
{ 
 foo(pA); 
 bar(pA); 
}
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.04.2013, 02:35  [ТС]
Ну вот Jupiter опубликовал мой ответ. Ну всё, собсно.

Добавлено через 1 минуту
BumerangSP, сойдёт, но у меня и Jupiter, всё же другой ответ.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.04.2013, 02:36
Я тоже немного подумал над задачей.
Кликните здесь для просмотра всего текста
В итоге первым пришел вариант в голову как у Jupiter.
Второй, сделать так чтобы это дерьмо компилилось, а затем сверху дописать
C++
1
#define printf(x, y) printf("%i\n", rand());
Третий вариант - это реально просто у класса X перегрузить операторы приведения к типу X* и Y*, которые будут возвращать нужные нам циферки.
1
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
01.04.2013, 02:40
Немного подкорректировал пример Jupiter'a. Чтобы он полностью соответствовал выводу в задании. Но почему так происходит?
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
37
38
39
40
41
42
43
44
#include <iostream>
 
class X
{
   public:
   virtual ~X()
   {
   }
};
 
class Y
{
   public:
   virtual ~Y()
   {
   }
};
 
class Z : public X, public Y
{
   public:
   virtual ~Z()
   {
   }
};
 
 
void foo(X* pX)
{
   std::cout << pX << std::endl;
}
 
void bar(Y* pY)
{
   std::cout << pY << std::endl;
}
 
int main()
{
   Z *pA = (Z*) 0x3e2478;
   Z &z = *pA;
   foo(pA);
   bar(pA);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2013, 02:40
Помогаю со студенческими работами здесь

Добавить в каждый текстовый файл в каталоге (имя каталога передается как параметр) дату его создания
Нужно добавить в каждый текстовый файл в каталоге (имя каталога передается как параметр) дату его создания и вывести их на экран. Пытался...

Из функции main в функцию kvadrat передается параметр side – длина стороны квадрата
Написать программу, в которой из функции main в функцию kvadrat передается параметр side – длина стороны квадрата. При этом функция...

Разные функции используют разные системы координат. Почему так?
Друзья! К примеру, нарисовали мы окно. И используем функцию void glutMouseFunc(void (*func)(int button, int state, int x, int y); ...

Почему не сохраняется в массив "+", если методу split передается параметр StringSplitOptions.None
Почему не сохраняется в массив &quot;+&quot;, если методу split передается параметр StringSplitOptions.None - который включает элементы в...

Как не писать один и тот же код, для функции, принимающей разные типы данных в качестве аргумента
Проблема такая: есть некая функция. Внутри нее происходят одни и теже вычисления, вне зависимости от типа входных данных. void...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru