С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1

Нулевой указатель как параметр функции

22.01.2012, 15:56. Показов 2706. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, разъяснить следующую ситуацию. Есть указатель, который пока что ни на что не указывает. Этот указатель передается в функцию. В функции создается массив, на который должен будет указывать этот указатель. Но по завершении функции указатель становится NULL. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double *vv;
void Func(double *V, int n);
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        Func(vv, 10);
        if (vv == NULL) ShowMessage("NULL!");
 
        exit(0);
}
//---------------------------------------------------------------------------
 
void Func(double *V, int n)
{
        V = new double[n];
}
Как вариант, можно объявить указатель следующим образом:
C++
1
double *vv = (double*)1;
Но хотелось бы узнать, из-за чего такое возникает. Это баг или у меня в коде неправильно?

Добавлено через 20 минут
Функция создает копию указателя и для него выделяет память. Как сделать, чтобы не создавала?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2012, 15:56
Ответы с готовыми решениями:

Как объявить параметр-указатель на строку в API функции для XE
Функция имеет параметр (аргумент): LPTSTR szProcessName Для C++Builder6 делаем, например, так: Edit1->Text.c_str() А для XE с её...

Типизированный указатель как параметр функции
Читаю книгу, там такой пример: Procedure ChangeParam (P: ^Double) Begin P^ := 150; New(P); P^ := 320; Dispose(P); ...

Указатель как входной параметр функции
#include <iostream> const int Max = 5; int* fill_array(double ar, int limit); void show_array(const double ar, int* n) ; int*...

5
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.01.2012, 16:00
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double *vv;
void Func(double **V, int n);
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        Func(&vv, 10);
        if (vv == NULL) ShowMessage("NULL!");
 
        exit(0);
}
//---------------------------------------------------------------------------
 
void Func(double **V, int n)
{
        *V = new double[n];
}
у тебя V передается по значению Почитай внимательно про передачу параметров
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.01.2012, 16:02  [ТС]
Нашел проще вариант: надо было так определить функцию
C++
1
void Func(double *&V, int n);
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.01.2012, 16:05
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Нашел проще вариант: надо было так определить функцию
C++
1
void Func(double *&V, int n);
Чем проще, непонятно. Меня всегда смущали такие конструкции, хотя я не отрицаю. что они работают.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.01.2012, 16:10  [ТС]
Ссылка на указатель передается.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
23.01.2012, 01:19
Дело в том, что вы можете спокойно использовать функции без & с абстрактными классами, к примеру:
C++
1
2
3
4
5
void __fastcall FillList(TListBox * List, const int count)
{
  for (int index = 0; index < count; index++)
    List->Items->Add(IntToStr(index);
}
Дело в том, что передавая тип подвида void *, вы в любом случае передаете указатель (цифровой номер для ссылки). И конечно зная указатель на объект с ним можно работать. Но применять такие функции как new или delete нельзя, так они из "другого района" и работают уже с номером указателя. А символ & в параметрах, указывает на то, что в процедуру/функцию передается не копия значения, а адрес памяти от данного значения (опять же указатель). Который можно изменять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2012, 01:19
Помогаю со студенческими работами здесь

Указатель на структуру, как параметр функции
Господа программисты! Прошу вашей помощи! Помогите передать функции в качестве аргумента указатель на структуру. Вот что есть: struct...

Можно ли передать указатель на функцию как параметр другой функции?
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

Как работает нулевой указатель?
Как загнать нулевой указатель на Пробовал вот так, например: {... char *REZ=STR(str2, str1); *REZ!=NULL ? printf(&quot;\n%c&quot;,...

Как проверить нулевой ли указатель?
Как проверить нулевой ли указатель? Почему-то всегда думал что так: if (pointer) Но не работает Заранее спасибо!

Как передать параметр типа "указатель на указатель" в функцию?
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю 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
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru