示例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#define LEN 20
const char* msgs[] =
{
" Thank you for the wonderful evening, ",
"You certainly prove that a ",
"is a special kind of guy. We must get together",
"over a delicious ",
" and have a few laughs"
};
struct names {
char first[LEN];
char last[LEN];
};
struct guy {
struct names handle; //嵌套结构
char favfood[LEN];
char job[LEN];
float income;
};
/*
在有些系统中,一个结构的大小可能大于它各成员大小之和。
这是因为系统对数据进行校准的过程中产生了一些“缝隙”。
例如,有些系统必须把每个成员都放在偶数地址上,或4的位数
地址上。在这种系统中,结构的内部就存在未使用的“缝隙”。
*/
int main(int argc, char* argv[])
{
// 初始化一个结构变量
struct guy fellow[2] = {
{ { "Ewen", "Villard" },
"grilled salmon",
"personality coach",
68112.00
},
{
{ "Rodney", "Swillbelly" },
"tripe",
"tabloid editor",
432400.00
}
};
struct guy* him; /* 这是一个指向结构的指针 */
printf("address #1: %p #2: %p\n", &fellow[0], &fellow[1]);
/* 和数组不同,结构名并不是结构的地址。 him=fellow[0](错误) */
him = &fellow[0]; /* 告诉编译器该指针指向何处 */
printf("pointer #1: %p #2: %p\n", him, him + 1);
/*
.运算符比*运算符优先级高,
&与*是一对互逆运算
him==&fellow[0]
*him==fellow[0]
假设 him == &barney
下面的关系恒成立:
barnet.income == (*him).income == him->income
*/
printf("him->income is $%.2f: (*him).income is $%.2f\n",
him->income, (*him).income);
him++; /* 指向下一个结构 */
printf("him->favfood is %s: him->handle.last is %s\n",
him->favfood, him->handle.last);
system("pause");
return 0;
}
运行测试