у меня возникла такая проблема... вообщем нужно в структуре описать указатель на другую структуру... но что-то у меня не получается... в чем проблема? подскажите. plzzz
#include <stdio.h>
struct s1 {
int i;
};
struct s2 {
int ii;
struct s1 *s;
};
int main(void) {
struct s2 *a;
a->s->i = 1;
return 0;
}
структуры и Цэ (структура в структуре)
Модератор: Модераторы разделов
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: структуры и Цэ
проблема в том, что ты не понимаешь что такое указатель, как он работает и для чего нужен.в чем проблема? подскажите. plzzz
медитируй над
Код: Выделить всё
int main(void) {
struct s1 b1, *b = &b1;
struct s2 a1, *a = &a1;
a->s = b;
a->s->i = 1;
return 0;
}слава роботам!
-
lava
- Сообщения: 155
- ОС: archer
Re: структуры и Цэ
А как конкретно у тебя не получается?
По-моему прога при выполнении этого кода должна вылетать.
Это происходит из-за отсутствия самих объектов: ты просто объявил уазатели на них.
Как вариант (наверно, лучший, но не всегда самый удобный) - ответ elide: создаются объекты и заодно указатели на них.
Можно немного иначе:
По-моему прога при выполнении этого кода должна вылетать.
Это происходит из-за отсутствия самих объектов: ты просто объявил уазатели на них.
Как вариант (наверно, лучший, но не всегда самый удобный) - ответ elide: создаются объекты и заодно указатели на них.
Можно немного иначе:
Код: Выделить всё
int main( void ) {
struct s2 *a;
a = new struct s2;
a->s = new struct s1;
a->s->i = 1;
// Взял память - не забудь положить на место
delete a->s;
delete a;
return 0;
}-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: структуры и Цэ
lava
ну тут речь про Цэ (:
так что никаких new/delete. только malloc/free и приведение типов.
учитывая, что человек не понимает сути указателей, не думаю, что этот вариант - проще.
ну тут речь про Цэ (:
так что никаких new/delete. только malloc/free и приведение типов.
учитывая, что человек не понимает сути указателей, не думаю, что этот вариант - проще.
слава роботам!
-
Andrew S
- Сообщения: 225
- Статус: экспериментатор
- ОС: Conrad-Gentoo
Re: структуры и Цэ
int main(void) {
struct s2 *a;
/*Выделяем память*/
a->s=(struct s1 *)malloc(sizeof(struct s1));
/*Проверяем выделилась ли она*/
if(a->s == NULL) {
printf("Not enough memory\n");
exit(1)
}
a->s->i = 1;
/*И не забываем освободить память*/
free(a->s);
return 0;
}
А вообще переход с паскаля (или бейсика) на Си - это не так просто, потому что паскаль создает иллюзию понимания там, где его (понимания) нет. Это как переход с винды на Линукс, тут книги надо читать.
struct s2 *a;
/*Выделяем память*/
a->s=(struct s1 *)malloc(sizeof(struct s1));
/*Проверяем выделилась ли она*/
if(a->s == NULL) {
printf("Not enough memory\n");
exit(1)
}
a->s->i = 1;
/*И не забываем освободить память*/
free(a->s);
return 0;
}
А вообще переход с паскаля (или бейсика) на Си - это не так просто, потому что паскаль создает иллюзию понимания там, где его (понимания) нет. Это как переход с винды на Линукс, тут книги надо читать.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: структуры и Цэ
Andrew S
дело говоришь. книжки надо читать, а не на форумы писать. (: задумайся, куда указывает a в этом коде (:
дело говоришь. книжки надо читать, а не на форумы писать. (:
Код: Выделить всё
int main(void) {
struct s2 *a;
/*Выделяем память*/
a->s=(struct s1 *)malloc(sizeof(struct s1));слава роботам!
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: структуры и Цэ
Ну прям заклевали 
Это еще что! Мне одному студенту надо было передать в функцию указатель на указатель на char, а потом значение указателя проверить (strtol) так он вместо
вот так вот налобал
а вы говорите...
Это еще что! Мне одному студенту надо было передать в функцию указатель на указатель на char, а потом значение указателя проверить (strtol) так он вместо
Код: Выделить всё
char *end;
strtol(str, &end, 10);вот так вот налобал
Код: Выделить всё
char **end;
end = (char **)malloc(sizeof(char *));
strtol(str, end, 10);а вы говорите...
В каждом из нас спит гений... и с каждым днем все крепче...
-
Andrew S
- Сообщения: 225
- Статус: экспериментатор
- ОС: Conrad-Gentoo
Re: структуры и Цэ
elide писал(а): ↑06.04.2006 10:03Andrew S
дело говоришь. книжки надо читать, а не на форумы писать. (:задумайся, куда указывает a в этом коде (:Код: Выделить всё
int main(void) { struct s2 *a; /*Выделяем память*/ a->s=(struct s1 *)malloc(sizeof(struct s1));
Ага, правильно, высыпаться тоже надо... Вот так и появляются глючные программы
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: структуры и Цэ
самый прикол не в этом (:
я один раз как-то вот так же ошибся, в результате чего обнаружил, что если в самом начале программы сделать *((int*)0x40015cc0)=6; то можно получить кучу debug вывода откуда-то из недр системы (: смотрелось все это крайне забавно (:
я один раз как-то вот так же ошибся, в результате чего обнаружил, что если в самом начале программы сделать *((int*)0x40015cc0)=6; то можно получить кучу debug вывода откуда-то из недр системы (: смотрелось все это крайне забавно (:
слава роботам!
-
Liksys
- Сообщения: 2910
Re: структуры и Цэ
Круто. А как оно работет?
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих