Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 21:42   #1
Plobzik
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 13
По умолчанию Глобальные элементы структуры

Помогите пожалуйста.

Объявляем структуру:
Код:
struct object {
 int x;
 int y;
 int w;
 int h;
};
Делаем переменную типа структуры:
Код:
struct object box;
Вот как сделать, чтобы все элементы переменной box были глобальными? Через указатели как-нибудь? А то получается что переменная объявляется в одной функции, а уже элементы должны использовать в другой.
Я наверно немного перепутал со словами элементы, тип структуры, но вы наверно все равно меня поняли =)
Заранее спасибо.
Plobzik вне форума Ответить с цитированием
Старый 02.07.2010, 21:53   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Можете поконкретнее объяснить, для чего вам это нужно?
В принципе можно объявить объект структуры в глобальной области видимости и потом получать доступ к ее элементам:
Код:
#include <stdio.h>
#include <conio.h>

struct object {
 int x;
 int y;
 int w;
 int h;
};

struct object box;

void f()
 {
 box.x = 1;
 box.y = 2;
 }
void g()
 {
 box.w = 5;
 box.h = 10;
 }
int main()
{
f();
g();
printf("x = %d\ny = %d\nw = %d\nh = %d", box.x, box.y, box.w, box.h);
getch();
return 0;
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 02.07.2010, 22:07   #3
Plobzik
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 13
По умолчанию

Просто у меня массив структур, я объявляю каждый элемент через цикл и делаю ввод данных с текстового файла. Это отдельная функция. В другой функции я использую уже элементы. Я делал, выносил объявление переменной за функции в глобальную область, но он не хочет, скорее всего ошибка моя, но не знаю почему так.
Plobzik вне форума Ответить с цитированием
Старый 02.07.2010, 22:21   #4
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

а если передавать функции указатель на массив структур.
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 05.07.2010, 14:02   #5
Plobzik
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 13
По умолчанию

Хм, вот пока сделал отдельную тестовую программу, только вот беда, он неверно пишет значение, лежащее во втором адресе, может быть, я не тот адрес ему даю, но как иначе?
Код:
#include <stdio.h>

int i;

struct waka {
 int x;
 int y;
};

struct waka *point;

void init_struct () {
 struct waka pac[2];
 pac[0].x = 21;
 pac[1].x = 40;
 point = &pac[0];
}

void use_struct (struct waka *man) {
 printf ("%d\n", man->x);
}

void main () {
 init_struct();
 for (i = 0; i < 2; i++) {
  use_struct(point+i);
 }
}
Plobzik вне форума Ответить с цитированием
Старый 05.07.2010, 14:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты что-то в этом роде хотел?:
Код:
int i;

struct waka {
 int x;
 int y;
};
const int n=4;
struct waka *point;

void init_struct () {
 point=new waka[n];
 for(int i=0;i<n;i++){
  (point+i)->x = 21;
  (point+i)->x = 40;
 }

}

void use_struct (struct waka *man) {
 printf ("%d\n", man->x);
}

int _tmain(int argc, _TCHAR* argv[])
{
   init_struct();
   for(int i=0;i<n;i++) use_struct(point+i);
   getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2010, 19:01   #7
Plobzik
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 13
По умолчанию

Хм, да меня все устраивает по идеи в том, что я написал, просто один выдает верно ответ, то есть 21, а второй пишет там -123454398, или что-то типа того и меняется, как будто я ошибся адресом, даже если я указываю на другой элемент массива, то он все равно пишет на подобии такого, не понимаю совсем почему так.

Последний раз редактировалось Plobzik; 05.07.2010 в 19:09.
Plobzik вне форума Ответить с цитированием
Старый 05.07.2010, 19:10   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, собственно, не странно. Вы ведь выделили массив в стеке, а при выходе из функции, стековый фрейм разрушается. Словом, так делать нельзя ) Используйте либо то, что Stilet предложил, либо объявляйте массив в статической памяти
netrino вне форума Ответить с цитированием
Старый 05.07.2010, 19:13   #9
Plobzik
Пользователь
 
Регистрация: 11.04.2010
Сообщений: 13
По умолчанию

Спасибо, да в статично помогло.
Всем спасибо за помощь.
Plobzik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальные переменные tae1980 Microsoft Office Excel 16 20.11.2013 08:41
1.Найти в матрице первую строку, все элементы которой отрицательны 2.отсортировать элементы массива по в w0lf16 Помощь студентам 2 22.11.2009 15:47
глобальные ф-ии в с# Natok Помощь студентам 1 25.05.2009 22:41
Модуль, позволяющий сортировать элементы структуры List a_n_n_a Помощь студентам 6 25.04.2009 09:45
Глобальные хуки Zeraim Win Api 2 24.05.2008 16:00