LINUX.ORG.RU

Обращение к полям структуры в структуре

 


0

1
#include <stdio.h>

struct point_t{
	int x;
	int y;
};
	
struct cirle_t{
	int r;
	struct point_t point;
} circle;

int main(int argc, char **argv)
{
	circle.r=10;
	circle.point.x=0;
	circle.point.y=0;
	return 0;
}

Как обратиться к полям структуры point еще? Обращаюсь как

cirle.point={0,0};
, а компилятор выдает ошибку. ЧЯДНТ? Да, туплю, согласен=)

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Не очень понял что надо, но

#include <stdio.h>

typedef struct point {
	int x;
	int y;
} point_t;
        
typedef struct circle {
	int r;
	point_t p;
} circle_t;

int main(int argc, char **argv)
{
	circle_t cr = {50, {3, -3}};
	point_t p = {0, 0};

	printf( "circle1 %d %d %d\n", cr.r, cr.p.x, cr.p.y );

	cr.p = p;
	printf( "circle2 %d %d %d\n", cr.r, cr.p.x, cr.p.y );

	return 0;
}

gman
()
Ответ на: комментарий от gman

У тебя инициализация, все верно - это более очевидно, чем последующее обращение.

tzukko
()

все, разобрался. всем спасибо!

int13h ★★★★★
() автор топика
Ответ на: комментарий от gman
#include <stdio.h>

struct point_t {
	int x;
	int y;
};
	
struct cirle_t{
	int r;
	struct point_t point;
} circle;
const struct point_t CENTER={0,0};

int main(int argc, char **argv)
{
	circle.r=10;
	circle.point.x=0;
	circle.point.y=0;
	circle.point=CENTER;
	return 0;
}

Во, так я хотел!

int13h ★★★★★
() автор топика
Последнее исправление: int13h (всего исправлений: 1)
Ответ на: комментарий от int13h
struct point_t {
	int x;
	int y;
};
	
struct cirle_t{
	int r;
	struct point_t point;
} circle = {
	.r = 10,
	.point = {
		.x = 0,
		.y = 0
	}
};
anonymous
()

Тебе реально не лень писать struct? Это юзается либо в самовложенных структурах, либо чтобы не захламлять имена, но ты юзаешь по пацаночке name_t - поэтому захломление тебе не грозит.

Делается это так:

#include <stdio.h>
#include <stdint.h>



typedef struct {
  int32_t x, y;
} point_t;

typedef struct {
  point_t p;
  int32_t r;
} circle_t;

inline circle_t circle(point_t p, int32_t r) {
  return (circle_t){p, r};
}

inline point_t point(int32_t x, int32_t y) {
  return (point_t){x, y};
}

int main(int argc, char **argv) {
  circle_t c = circle(point(0, 0), 0);
  circle_t c1 = (circle_t){(point_t){0, 0}, 0};
  circle_t c2 = {{0, 0}, 0};//так днище, не всегда работает да и не понятно.
}
anonymous
()
Ответ на: комментарий от anonymous

спасибо, я уже пишу с typedefами)

int13h ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ах да, это гнуц. В с99 там через точку, как написал пацан выше.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.