Home > Backend Development > C++ > Can C Structures Be Initialized Using Designated Initializers for Pointer Members?

Can C Structures Be Initialized Using Designated Initializers for Pointer Members?

Susan Sarandon
Release: 2024-11-02 02:20:30
Original
948 people have browsed it

Can C   Structures Be Initialized Using Designated Initializers for Pointer Members?

C Structure Initialization

It has been questioned whether it is possible to initialize structures in C using the following syntax:

struct address {
    int street_no;
    char *street_name;
    char *city;
    char *prov;
    char *postal_code;
};

address temp_address = { .city = "Hamilton", .prov = "Ontario" };
Copy after login

While some sources suggest that this style is only supported in C, this is not entirely accurate.

Technical Limitations

Although C supports structure initialization using designated initializers, there is a technical limitation: designated initialization is not supported for members that are pointers or references. Since street_name, city, prov, and postal_code are all pointers in the provided example, the designated initialization syntax cannot be used to initialize these members.

Best Practices and Readability

While the designated initialization syntax can provide clear readability, it is generally considered best practice to initialize structures using a combination of default constructors and explicit member initialization. This allows you to specify which members to initialize explicitly and which to leave uninitialized.

For example, you can initialize the temp_addres structure as follows:

address temp_addres = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};
Copy after login

This approach provides clear readability by using comments to identify each member and its value. Additionally, it ensures that any pointers not explicitly initialized are set to nullptr for safety.

The above is the detailed content of Can C Structures Be Initialized Using Designated Initializers for Pointer Members?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template