- About C
- C Basics
- Arrays and Strings
- Control Structures
- Types and Pointers and Memory
- Functions
- Types and Structs
Example code based on
LearnXinYminutes
and licensed under
CC Attribution-Share 3
Note: 'Alpha' Module. Boilerplate code in challenges may include some C++.
Types and Structs
Collapse Content
Show Content
C doesn't have classes, but it allows user-defined types and structs.
// Typedefs can be used to create type aliases
typedef int my_type;
my_type my_type_var = 0;
// Structs are just collections of data, the members are allocated sequentially,
// in the order they are written:
struct rectangle {
int width;
int height;
};
It's not generally true that
sizeof(struct rectangle) == sizeof(int) + sizeof(int)
due to potential padding between the structure members (this is for alignment
reasons). See StackOverflow
void function_1()
{
struct rectangle my_rec;
// Access struct members with .
my_rec.width = 10;
my_rec.height = 20;
// You can declare pointers to structs
struct rectangle *my_rec_ptr = &my_rec;
// Use dereferencing to set struct pointer members...
(*my_rec_ptr).width = 30;
// ... or even better: prefer the -> shorthand for the sake of readability
my_rec_ptr->height = 10; // Same as (*my_rec_ptr).height = 10;
}
// You can apply a typedef to a struct for convenience
typedef struct rectangle rect;
int area(rect r)
{
return r.width * r.height;
}
if you have large structs, you can pass them "by pointer" to avoid copying the whole struct:
int areaptr(const rect *r)
{
return r->width * r->height;
}