Struct Syntax

C is a procedural programming language, which means that a program is just a collection of functions – no classes. However, C does have a construct called a struct that is similar to a data class in Java. A struct is simply a new variable type that is a collection of related data.

Syntax

Here is the format of a struct declaration:

struct name {
    type1 name1;
    type2 name2;
    ...
} objList;

Here, name is the optional name for this structure type. This name is needed if you plan to created any variables of this struct type. The type name elements are fields that you want in your struct. For example, if the struct represented a person, you might want these fields:

char name[20];
int age;

Fields in structs are the same idea as fields in a Java or C# class.

Finally, objList is an optional list of variable names you want constructed with this struct type.

First Example

Here is a simple struct:

struct person {
    char name[20];
    int age;
} p1, p2;

Now, struct person is a new datatype. p1 and p2 are variables of type struct person.

Declaring Struct Variables

You can automatically declare struct variables by listing variable names at the end of the struct definition. You can also declare them outside the definition just like you do ordinary variables. The format for declaring variables in C is:

type name;

The type of the above struct, for example, is struct person. So we can declare another struct variable as follows:

struct person p3;

This declaration automatically allocates space for the struct, including space for every field in the struct.

Accessing Struct Fields

Accessing a field in a struct variable is exactly like accessing a field in a Java or C# object:

structVar.fieldName

Here, structVar is the name of the struct variable and fieldName is one of the fields in the struct. This allows us to access or change that field. Let’s declare another struct person variable, and set the person’s name to “Bob” and age to 20.

Here’s how:

struct person bobPerson;        //declare struct variable
bobPerson.age = 20;             //set person's age to 20
strcpy(bobPerson.name, "Bob");  //set person's name to "Bob"

Notice that if we are initializing a string field, we must use strcpy. The following will NOT compile since name is an array (a constant pointer):

bobPerson.name = "Bob";         //Will not compile!