本节书摘来自异步社区《指针的编程艺术(第二版)》一书中的第1章,第1.4节,作者 蔡明志,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.4 结构
指针的编程艺术(第二版)
谈完了数组后,接着讨论结构。结构是由多个不同数据类型所组成的一个集合体。我们以范例addressStruct来加以说明。
范例addressStruct
/* addressStruct.c */
#include <stdio.h>
#include <stdlib.h>
int main( )
{
/* 声明结构变量 */
struct employee
{
char id[7]; /* ID号码 */
char name[20]; /* 员工姓名 */
int salary; /* 所得薪资 */
};
/* 定义结构变量,并设定其初值 */
struct employee manager = {"D12345", "Peter", 35000};
/* 输出结构变量的内存地址 */
printf("&manager= %x\n", &manager);
printf("manager.id= %x\n", manager.id);
printf("manager.name= %x\n", manager.name);
printf("&manager.salary= %x\n\n", &manager.salary);
/* 输出结构变量的值 */
printf("manager.id= %s\n", manager.id);
printf("manager.name= %s\n", manager.name);
printf("manager.salary= %d\n\n", manager.salary);
system("PAUSE");
return 0;
}
输出结果
从输出结果得知结构变量名称与结构的第一个元素id的地址是相同的,都是12ff40,由于id占7字节,所以结构的第二个元素name的地址为12ff47,由于name字符串占20字节,所以结构第三个元素的地址为12ff5c。
该范例如果以%p代替%x输出内存地址,则会补00,以满足32位。如输出&manager,则输出结果为0012FF40,你可以试试看。