C ++在并集结构中访问变量

时间:2018-12-11 00:32:47

标签: c++ struct member unions

我正在与一个结构定义如下的图书馆一起工作:

typedef struct {
    int x;
    union {
        struct {
            y;
            union {
                int z;
            } innerStruct;
            char *a;
        } middleStruct;
    int q;
    } u;
} mainStruct;

如何访问char * a?

我尝试了多种方法。这有效:

mainStruct *myStruct;
int d = myStruct->x;

但这不起作用:

char *d = myStruct->a;

使用上述方法我可以得到x很好,但不是。为什么?

我以前从未与工会合作过,我被迫将此结构用作我需要的库的一部分。感谢您的提前帮助,如果我提出这个问题,对不起。

2 个答案:

答案 0 :(得分:1)

x字段是mainStruct的直接成员,因此很自然地会起作用:

int d = myStruct->x;

字段amiddleStruct的成员,umainStruct的变体,xchar *d = myStruct->u.middleStruct.a; 的成员。它比from flask import Flask, jsonify, session import os from flask_session import Session app = Flask(__name__) app.config["SESSION_TYPE"] = "filesystem" app.config["SESSION_PERMANENT"] = False app.config["SECRET_KEY"] = os.environ.get('SECRET_KEY') or 'you-will-never-guess' Session(app) tasks = [ { 'id': 1, 'title': u'Buy groceries', 'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 'done': False }, { 'id': 2, 'title': u'Learn Python', 'description': u'Need to find a good Python tutorial on the web', 'done': False } ] @app.route('/todo/api/v1.0/tasks', methods = ['GET']) def get_tasks(): if "counter" in session: session["counter"] += 1 session.modified = True else: session["counter"] = 1 session.modified = True print("Counter: " + str(session["counter"])) return jsonify({'tasks': tasks}) if __name__ == '__main__': app.run(debug = True) 嵌套得更深,因此您需要像这样导航数据结构:

curl -i http://localhost:5000/todo/api/v1.0/tasks

答案 1 :(得分:1)

  

使用上述方法我可以得到x很好,但不是。为什么?

因为xmainStruct的成员,但a不是。

amiddleStruct的成员,u的成员是mainStruct的成员。您可以使用与访问非工会类实例的成员相同的语法来访问工会实例的成员。因此,您可以编写myStruct->u.middleStruct.a

P.S。除非您首先初始化mainStruct->u,否则mainStruct的行为是不确定的。