我已经声明了一个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
结构是否有任何格式说明符?
答案 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)
在您提供的代码中,未声明单个变量。那里只有两个结构定义(num
和Employee
),然后是两个与它们相关联的类型定义(d1
和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;
} 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
,希望像我一样期待它。