How to access a struct within a struct?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers How to access a struct within a struct?
# 1  
Old 04-11-2010
How to access a struct within a struct?

Can someone tell me how to do this?

Just a thought that entered my mind when learning about structs.
First thought was:

struct one
{
struct two;
}

struct two
{
three;
}

one->two->three

would this be how you would access "three"?
# 2  
Old 04-11-2010
Well kinda, but no, this is incorrect in some ways.

A struct adds labels to a group of related data in C. The group of data usually corresponds to a single record of structured data of some type, such as:

Code:
struct customer {
 int account_number;
 character *first_name;
 character *last_name;
} ;

It is important to realize that the definition of a structure is often different than the allocation of memory to use it. In the example above, the customer record above is defined by a structure but the allocation of memory to that structure is a separate step. No memory was allocated to 'customer' in the struct statement and usually this is done with an automatic array, a single automatic variable or a call to malloc().

This following statements creates a 3 integer struct and creates the associated memory (in this case on the stack)

Code:
struct point_s {
   int x;
   int y;
   int z;
} ;  /* define the record */

struct point_s point; /* one element of that record */

struct point_s *PteToPoint = &point;  /* a pointer pointing to that record */

/* set x, y, z of point in 3 different ways: */

point.x=1;
(*PtrToPoints).y=2;
PtrToPoints->z=3;   /* idiomatic C pointer to a struct member */

In this case, the data structure for a point in 3d space is created. Next, the memory for 1 element is created in one step. You can create an array of points similarly.

The example you have of one->two->three would be used in the case of a structure containing a pointer. Each application of '->' simply means 'what that points to' So you data structure would need to be:

Code:
struct s1 {
   [whatever data type] three;
};

struct s2 {
   [whatever other data];
   struct s1*two;
};

So one->two->three would be the data in a struct defined by s1 pointed to by a pointer inside s2...

You can, however, have nested structures such as:

Code:
struct first_type
{
  int i_member;
  float f_member;
};

struct second_type
{
  double d_member;
  struct first_type s_member;
};

struct second_type structure;

structure.d_member = 12345.6789;
structure.s_member.i_member = 5;
structure.s_member.f_member = 1023.17;


The cycle for using a struct is usually along these lines:

Code:
  1) Define the record (using struct statements, union, etc); 
  2) Allocate memory for the data (by a named variable, call to malloc, creation of an array);
  3) Fill the records (using C statements); 
  4) Access the data (using var.member directly or (*var).member or var->member with pointers).

http://en.wikipedia.org/wiki/Struct_...mming_language)

Last edited by drewk; 04-11-2010 at 11:36 PM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Get struct definition

I have many headers with huge amount of structures in them, typical one looks like this: $ cat a.h struct Rec1 { int f1; int f2; }; struct Rec2 { char r1; char r2; }; struct Rec3 { int f1; float k1; float ... (6 Replies)
Discussion started by: migurus
6 Replies

2. Programming

Storing C++-struct in file - problem when adding new item in struct

Hi, I have received an application that stores some properties in a file. The existing struct looks like this: struct TData { UINT uSizeIncludingStrings; // copy of Telnet data struct UINT uSize; // basic properties: TCHAR szHost; //defined in Sshconfig UINT iPortNr; TCHAR... (2 Replies)
Discussion started by: Powerponken
2 Replies

3. UNIX for Dummies Questions & Answers

struct winsize

what is struct winsize used for? i tried looking it up, but no luck. (0 Replies)
Discussion started by: l flipboi l
0 Replies

4. Programming

help with struct command in C

in C i am using this code to get the c time or a time or m time struct dirent *dir; struct stat my; stat(what, &my); thetime = my.st_ctime; How can i check if i have permission to check the c time of the file? (1 Reply)
Discussion started by: omega666
1 Replies

5. Homework & Coursework Questions

Passing pointers to struct

Hi, i'm trying to copy a struct into a binary file using the unix instruction write, so i declare and fill the struct "superbloque" in one function "initSB" and then i pass the pointer to another function called bwrite (for block write) which calls write. The problem is that i call the function... (2 Replies)
Discussion started by: ignatius3
2 Replies

6. Linux

GCOV : struct bb

Hi, I am working on gcov.Meaning, analysing the functionality of gcov. There is one structure called "struct bb". I am not sure, how struct bb members are getting assigned values. If anyone knows how it is happening pls let me know. Thanks in advance. --Vichu (0 Replies)
Discussion started by: Vichu
0 Replies

7. Programming

Struct Array

in my .c file i have a struct atop of the program defined as follows: #define MAX 10 int curtab; static struct tab { int count; int use; } tab; with the initial function following it like so: int tab_create(int init_count) { int i; for(i=0; i < MAX; i++) {... (1 Reply)
Discussion started by: micmac700
1 Replies

8. Programming

struct tm problem

I receive an integer as argument for a function. within function definition i want it to be of type struct tm. eg.. main() { int a; ...... } function(...,..,a,..) int a; { struct tm tm; if(!a) ^ time(&a); ^ ... (4 Replies)
Discussion started by: bankpro
4 Replies

9. Programming

save a struct

hi all , can i save a structure in c in a file? how ? help me , thx. :) (2 Replies)
Discussion started by: kall_ANSI
2 Replies

10. Programming

Struct Initialization

Hi We are using a code generator for initializing structures with the #define macro. Compiling it with the GCC 2.8.1 (with -ansi) it OK. But when we are using the SUN C 5.0 compiler it screams. Following is a code sample: #include <stdlib.h> #include <stdio.h> typedef struct TEST3 {... (4 Replies)
Discussion started by: amatsaka
4 Replies
Login or Register to Ask a Question