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

Как передать указатель на структуру в функцию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.94
nikphil87
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 180
09.10.2012, 22:00     Как передать указатель на структуру в функцию #1
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже заполненные массивы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void func1()  //функия 1
{
typedef struct   //объявление структуры
{
float p;
double t;
}
Array;
 
Array* arr = new Array[n];  
for(int i=0;i<n;i++)   //заполнение массива
{
arr[i].p=i*0.1;
arr[i].f=i*2;
}
}
 
void func2(.....)  //??????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 22:00     Как передать указатель на структуру в функцию
Посмотрите здесь:

Как передать указатель на функцию в функцию C++
C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
C++ Как правильно передать в функцию указатель на двумерный массив?
Указатель на функцию (как передать?) C++
C++ Как передать в функцию указатель на структуру, если эта структура не определена глобально?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.10.2012, 22:04     Как передать указатель на структуру в функцию #2
C++
1
2
3
4
5
6
7
void func2(Array* ptr, int n)
{
//....
}
 
//вызов
func2(arr, n);
nikphil87
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 180
09.10.2012, 22:38  [ТС]     Как передать указатель на структуру в функцию #3
Не узнает указатель arr за пределами func1.

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
void func1()
{
int i;
typedef struct
        {
        float p;
        double t;
        }
        Array;
 
                Array* arr = new Array[n];
        for(i=0;i<n;i++)
        {
        arr[i].p=i*0.1;
        arr[i].t=i*2;
        }
    
}
void func2(Array* ptr,int n)
{
 
        f1=fopen("1.txt","w");
        for(int i=0;i<n;i++)
        {
        fprintf(f1,"p=%f t=%d\n",arr[i].p,arr[i].t);      //<--Undefined symbol "arr"
        }
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
func1();
func2(arr,n);                                                   //<--Undefined symbol "arr"
}
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.10.2012, 23:14     Как передать указатель на структуру в функцию #4
Вынесите определение типа struct Array из функции.
nikphil87
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 180
09.10.2012, 23:18  [ТС]     Как передать указатель на структуру в функцию #5
выносил,тогда ругается при вызове функции также на arr.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2012, 00:29     Как передать указатель на структуру в функцию #6
Цитата Сообщение от nikphil87 Посмотреть сообщение
Не узнает указатель arr за пределами func1.
Создайте массив в глобальной области и передавайте указатель на него в функции. Или возвращать из функции, где массив создаётся, указатель на него, и использовать этот указатель в других функциях.
nikphil87
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 180
13.10.2012, 22:55  [ТС]     Как передать указатель на структуру в функцию #7
Ну вот вроде все попробовал, но не работает. На операторе fprintf выдает ошибку "Access Violation" и в этом месте arr[i].p=NULL, то есть в эту функцию так ничего и не передалось.
Вот текст программы может кто подскажет где собака порылась. В файле один хранятся числа 1,2,3,4,5. Каждое с новой строки.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
int j,N;
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *f1,*f2,*f3;
 
typedef struct
        {
        int p;
        }
        Array;
Array *arr;
//--------------------------------------------------------------------------
void func1()
{
int i;
fprintf(f3,"j=%i\n",j);
for(i=0;i<=j;i++)
fscanf(f1,"%i",&N);                         //размер массива
          Array *arr = new Array[N];
for(i=0;i<N;i++)
fscanf(f1,"%i",&arr[i].p);                 //заполнение массива
}
 
void func2(Array *ptr,int N)
{
int i;
fprintf(f3,"j=%i\n",j);
for(i=0;i<N;i++)
fprintf(f3,"func2->%i\n",arr[i].p);      //вывод на печать, где и происходит остановка программы
 
}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
j=0;
f1 = fopen ("1.txt","r");
f3 = fopen("3.txt","a");
        while(j<3)
        {
        func1();
        func2(arr,N);
        j++;}
fclose(f1);
fclose(f3);
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2012, 23:06     Как передать указатель на структуру в функцию #8
Опять неправильно делаете. Вы в функции создаёте локальный указатель на массив, а глобальный остаётся не у дел. Если создали глобальный указатель, то не объявляйте указатель с тем же именем в функции, это будет уже другой указатель. Просто выделяйте память под глобальный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
Array *arr;
 
void func1()
{
int i;
fprintf(f3,"j=%i\n",j);
for(i=0;i<=j;i++)
fscanf(f1,"%i",&N);                         //размер массива
          arr = new Array[N]; //!!!
for(i=0;i<N;i++)
fscanf(f1,"%i",&arr[i].p);                 //заполнение массива
}
...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.10.2012, 11:55     Как передать указатель на структуру в функцию #9
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
struct Array   //объявление структуры
{
    float p;
    double t;
};
 
void func2(Array *p, int n);
 
void func1()  //функия 1
{
    Array* arr = new Array[n];  
 
    for(int i = 0; i < n; i++)   //заполнение массива
    {
        arr[i].p = i * 0.1;
        arr[i].f = i * 2;
    }
    func2(arr, n);
    delete [] arr;
}
 
void func2(Array *p, int n)  //??????
{
    p[0].p *= 2;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 10:25     Как передать указатель на структуру в функцию
Еще ссылки по теме:

как передать функции указатель на функцию в качестве аргумента? C++
как в функцию передать указатель на матрицу C++
C++ Как передать указатель на функцию через метод класса ?

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

Или воспользуйтесь поиском по форуму:
nikphil87
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 180
15.10.2012, 10:25  [ТС]     Как передать указатель на структуру в функцию #10
всем спасибо,разобрался!!
Yandex
Объявления
15.10.2012, 10:25     Как передать указатель на структуру в функцию
Ответ Создать тему
Опции темы

Текущее время: 04:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru