I found this way of doing it for global variables, that does not require to modify the original structure definition :
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
then declare the variable of a new type inherited from the original struct type and use the constructor for fields initialisation :
struct temp_address : address { temp_address() {
city = "Hamilton";
prov = "Ontario";
} } temp_address;
Not quite as elegant as the C style though ...
For a local variable it requires an additional memset(this, 0, sizeof(*this)) at the beginning of the constructor, so it's clearly not worse it and @gui13 's answer is more appropriate.
(Note that 'temp_address' is a variable of type 'temp_address', however this new type inherit from 'address' and can be used in every place where 'address' is expected, so it's OK.)