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

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

Войти
Регистрация
Восстановить пароль
 
newbie666
Заблокирован
#1

Какой то бред с передачей указателя в функцию :-) - C++

02.04.2014, 12:07. Просмотров 411. Ответов 11
Метки нет (Все метки)

Привет! Толи бред какой - то Толи у меня пробел в азах

Вот например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void MegaFunction( BYTE *data );
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      MegaFunction(test);
      //ТУТ test всё равно == NULL (x86 - 0x00000000) ...
      return 0;
}
 
void MegaFunction( BYTE *data )
{
    data = new BYTE[2];
    data[0] = 0x01;
    data[0] = 0x02;
}
После вызова мегафункции в мейне, в которую по идее передаю указатель на test, этот test всё равно остаётся нулевым, хотя в мегафункции вроде аллоцируется память и даже какие - то значения присваиваются ... Три тысячи чертей, но почему? Или для таких базовых вещей надо указатель на указатель юзать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 12:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какой то бред с передачей указателя в функцию :-) (C++):

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

какой то бред! - C++
не могу понять что за цирк.. #include <math.h> #include <iostream.h> #include <iomanip.h> main() { double a,d,n; ...

Программа считает бред какой-то - C++
#include <stdio.h> int main() { int t,y,v,x,n=0; scanf("%d %d", &x, &y); while (x<y) {...

Помогите с передачей массива в функцию - C++
Добрый день, подскажите как правильно передать все элементы массива в функцию(для их последующего сложения)? #include <iostream> ...

составить программу с передачей массива в функцию - C++
Написать программу поиска минимального элемента массива. Поиск оформить в виде функции. Вывод массива на экран оформить в виде функции....

Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? - C++
Собсно. То есть ребята, вот пример отсюда: http://www.cplusplus.com/reference/algorithm/count_if/ // count_if example #include...

11
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.04.2014, 12:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так в функции то копия указателя
1
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
02.04.2014, 12:13 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от newbie666 Посмотреть сообщение
//ТУТ test всё равно == NULL (x86 - 0x00000000) ...
Потому что значение указателя копируется в функцию. Ты работаешь с временной переменной. Используй **.

Добавлено через 25 секунд
Цитата Сообщение от newbie666 Посмотреть сообщение
Или для таких базовых вещей надо указатель на указатель юзать?
Точно.
1
palva
2681 / 1908 / 287
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
02.04.2014, 12:15 #4
C++
1
2
3
BYTE b;
BYTE *test = &b;
MegaFunction(test);
Добавлено через 1 минуту
C++
1
2
BYTE test;
MegaFunction(&test);
0
newbie666
Заблокирован
02.04.2014, 12:22  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Так в функции то копия указателя
не ну я так и подумал, просто мне почему - то казалось, что указатель как бы не переменная, а ниточка связи с внешним миром ухаха
0
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 11:41 #6
ну если всем понятно, то дайте кто-нить, плиз, полный код
а то у меня ну никак не получается, мозги уже кипят (
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
03.04.2014, 11:44 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BYTE * MegaFunction();
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      test = MegaFunction();
      delete [] test;
      return 0;
}
 
BYTE * MegaFunction(  )
{
    data = new BYTE[2];
    data[0] = 0x01;
    data[1] = 0x02;
return data;
}
0
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 11:53 #8
aLarman, не, это через возврат ссылки, это не то чего я ждал
ведь автор вроде как (догадываясь по тексту) сделал без возврата сылки а с помощью **. вот мне его решение и интересно, как?..
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
03.04.2014, 12:01 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void MegaFunction(BYTE ** data);
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      MegaFunction(&test);
      delete [] test;
      return 0;
}
 
void MegaFunction(BYTE ** data)
{
    *data = new BYTE[2];
    *data[0] = 0x01;
    *data[1] = 0x02;
}
Добавлено через 5 минут
поправка
C++
1
2
3
4
5
6
void MegaFunction(BYTE ** data)
{
    *data = new BYTE[2];
    (*data)[0] = 0x01;
    (*data)[1] = 0x02;
}
1
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 12:22 #10
aLarman, спасибо, да, вот это то что надо. класс!
0
aLarman
03.04.2014, 13:10
  #11

Не по теме:

don_keyhot, еще вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void MegaFunction(unsigned char *& data);
 
int main()
{
   
    unsigned char *test = NULL;
    MegaFunction(test);
    cout<<(int)test<<endl;
    cout<<(int)test[0]<<endl;
    cout<<(int)test[1]<<endl;
    delete [] test;
   system("pause");
   return 0;
}
 
void MegaFunction(unsigned char *& data)
{
    data = new unsigned char[2];
    data[0] = 0x01;
    data[1] = 0x02;
}

0
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 14:17 #12
aLarman, круто! спасибо
0
03.04.2014, 14:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 14:17
Привет! Вот еще темы с ответами:

Передача указателя на шаблонную функцию в другую функцию - C++
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает итераторы для диапазона элементов, указатель...

Передача в функцию указателя - C++
Почему плохо передавать в функцию указатель на строку или массив и возвращать указатель на строку или массив?

Передача указателя в функцию - C++
Здраствуйте. Если не охота читать гору текста то этот абзац + последущий за ним код можете пропустить. Задали на лабе сделать некий...

Шаблон указателя на функцию - C++
Надо создать шаблон, который бы генерировал функцию, вызывающую другую функцию, которую я передал ей в шаблоне. Что - то похожее на это,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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