C++: Struct Operations

Assume the following declaration
//--- Define a new struct type
struct Point {
    int x;
    int y;
};

//--- Declare some variables of type Point.
Point p1;
Point p2;
Point* paddr;  // declare pointer to a Point struct

Member (field) selection - dot operator

The "." (dot) operator is used to select a member of a struct. This operator can be applied to any expression that yields a struct (function call, subscription, etc).
int h = p1.x;
p2.y = p1.y;

Member (field) selection - arrow operator

When using a pointer to a struct, the "->" (arrow) operator is typically used as a more readable way to both dereference the pointer and select a member. See -> operator.
// The following are equivalent.
int h = paddr->x  // using arrow notation.
int h = (*paddr).x;  // using deref plus dot.

Assignment

A struct variable can be assigned to/from.
p1 = p2;

Parameter

A struct can be passed to a function either as a value or a reference parameter. Large structs are sometimes passed as reference parameters to avoid the cost of the copy, even tho the value is not going to be changed.

Returned by function

A struct may be returned by a function.

Comparison - NO

The comparison operators do not work on structs. To compare structs, compare individual fields.
if (p1.x==p2.x && p1.y==p2.y) . . .
It is not possible to write p1==p2.

There are good reasons to forbid comparison.

A subelement of array or another struct

A struct value can be used inside of another struct or as an element type in an array.

Arithmetic operators - NO

By default none of the arithmetic operators work on structs.

I/O - NO

The I/O operators >> and << do not work for structs; you must read/write the fields individually.

Solutions

You may redefine operators so that they do work with your structs. When providing functions and overloaded operators for your struct, use the class keyword instead -- it's what programmers expect. See Operator Overloading.