访问结构中的值结构?

时间:2014-06-22 19:25:06

标签: c structure

我已经声明了一个typedef结构,而在另一个typedef结构中,我正在使用第一个typedef ..但是我如何才能访问第一个类型def结构的值..比如... ...

typedef struct num
{
        uint32_t number1;
        uint32_t number2;    
}d1;

typedef struct Employee
{
       char ename[20];
       int ssn;
       float salary;
       d1 number;
}emp1;

如果我使用

printf("value of number1: %" PRIu32 "\n",emp1.number.number1);

我没有获得预期的价值,如果我输入

printf("value of number: %" PRIu64 "\n",emp1.number);

然后即使我没有得到预期的价值,但我得到警告

  

警告:格式%lu需要类型为'long unsigned int'的参数,但参数3的类型为'd1'[-Wformat]

任何人都可以帮我吗?

typedef结构是否有任何格式说明符?

3 个答案:

答案 0 :(得分:1)

只需在main中创建一个emp1对象,并给它一个像下面这样的值,它应该没问题

emp1 emp;
emp.number.number1=3;
//printf then with emp.number.number1 ;)

答案 1 :(得分:1)

您正在访问值" number1"像

emp1.number.number1

但是这里" emp"您定义的数据类型。所以要访问" number1"从其他结构,首先你必须创建第二个结构的对象。像

emp1 obj;

然后访问" number1"来自第二个结构,如

obj.number.number1

答案 2 :(得分:0)

在您提供的代码中,未声明单个变量。那里只有两个结构定义(numEmployee),然后是两个与它们相关联的类型定义(d1emp1)。

如果您尝试按以下方式编译代码:

#include <stdio.h>
#include <inttypes.h>

typedef struct num {
    uint32_t number1;
    uint32_t number2;
} d1;

typedef struct Employee {
    char ename[20];
    int ssn;
    float salary;
    d1 number;
} emp1;

int main( ) {
    printf( "value of number1: %" PRIu32 "\n", emp1.number.number1 );
    return 0;
}

您收到错误,表示没有emp1可用的变量。

首先,我将尝试简要解释typedef的作用:它定义了一个新类型或几个新类型;对于您想要的已定义类型。语法如下:

typedef definedtype newtype1[, newtype2, ... ];

它的一个特殊用途是,它允许您使用已定义的newtype1创建新变量,例如:

emp1    empvariable1;
// equivalent to struct Employee empvariable1;

因此,如果您希望拥有结构的变量并将其命名为emp1,那么您应该更改已定义的新类型的名称;然后还声明一个名为emp1的该类型的变量,也最好初始化它:

#include <stdio.h>
#include <inttypes.h>

typedef struct num {
    uint32_t number1;
    uint32_t number2;
} d1;

typedef struct Employee {
    char ename[20];
    int ssn;
    float salary;
    d1 number;
} emp;  // removed "1"

int main( ) {
    emp emp1 = {
        "ThoAppelsin",
        1337,
        123456789.0,
        {
            100,
            200
        }
    };

    printf( "value of number1: %" PRIu32 "\n", emp1.number.number1 );
    return 0;
}

现在打印100,希望像我一样期待它。