结构体
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct student {//结构体的所占空间大小是4的整数,因为存在对齐,对齐的目的是为了提高cpu访问内存效率
int num;//num sex等成为成员
char name[20];
char sex;
int age;
};//结构体类型声明
int main()
{
struct student s = { 100,"lele",'m',20 };
struct student sarr[3];
int i;
printf("%d %s %c %d\n", s.num,s.name,s.sex,s.age);//访问成员并将其输出
for (i = 0; i < 3; i++)
{
scanf("%d%s %c%d", &sarr[i].num, sarr[i].name, &sarr[i].sex, &sarr[i].age);
}
for (i = 0; i < 3; i++)
{
printf("%d %s %c %d\n", sarr[i].num, sarr[i].name, sarr[i].sex, sarr[i].age);
}
return 0;
}
结构体指针
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
char sex;
};
int main()
{
struct student s = { 1001,"wangle",'M' };
struct student* p;
p = &s;
printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);//因为.的优先级高于*p 所以必须打括号
printf("%d %s %c\n", p->num, p->name, p->sex);//两种写法输出的一样
//结构体初始化
struct student sarr[3] = { 1001,"lilei",'M',1005,"zhangdan",'M',1006,"lishi",'M'};
int num;
p = sarr;
printf("-----------------------------------------------\n");
num = p->num++;
printf("num=%d,p->num=%d\n", num, p->num);//num=p->num; (因为->的优先级高于++,所以后面的部分应该是整体++ 即 p->num++
//其输出为1001,1002
num = p++->num;//num=p->num;p++;//p++相当于指向了下一个数组
printf("num=%d,p->num=%d\n", num, p->num);
//其输出为1002 1005
return 0;
}
typedef
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//typrdef的作用是起别名
//给结构体类型起别名,为stu..起了结构体指针类型的别名,为pstu
typedef struct student {
int num;//num sex等成为成员
char name[20];
char sex;
}stu, * pstu;
typedef int INTEGER;
int main()
{
stu s = { 1001,"wangle",'M' };
pstu p;//stu* p1;那么p1也是一个结构体指针
INTEGER i = 10;
p = &s;
printf("i=%d,p->num=%d\n", i, p->num);
return 0;
}