一、struct
定义结构体类型的一般形式:
struct 结构体类型名
{
成员表列
} ;
struct :是关键字,作为结构体数据类型的标志,
结构体类型名:紧跟在struct后面 ,用户自行定义
成员列表:说明结构体所包含的成员及其数据类型
{ }外的;不能省略:类型说明的终止
1、结构体是自定义数据类型,定义完成后等同于内置类型。
例:
#include <string.h>
#include <stdlib.h>
struct student
{
char name[20];
int age;
};
int main()
{
struct student stu1 = { "xiaowang", 19 };
printf("%s %d\n", stu1.name, stu1.age);
return 0;
}
运行结果为:
2、结构体不能定义一个自身成员变量,但可以定义一个指向自身的指针。
例:
struct AA
{
int b;
};
struct A
{
int a;
int AA b;//此处合法,因为上面定义了。若没有定义就不合法。
struct *p;//合法,4个字节。
struct A c//不合法,因为无法确定c的内存大小,不能分配内存空间。
};
3、构体普通变量通过"."访问它的成员;结构体指针变量通过"->"访问它的成员
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
char name[20];
int age;
};
void show(const struct student *pstu)
{
printf("name:%s\nage:%d\n\n",pstu->name,pstu->age);
//pstu->age = 0;//error
}
int main()
{
struct student stu1;//stu1的age和name为随机值;
printf("stu1\n");
show(&stu1);
struct student stu2={"zhangfei"};//stu2的age为0,因为聚合类型只初始化一部分,剩余部分为0;
printf("stu2\n");
show(&stu2);
struct student stu3={"xiaowang", 19 };
printf("stu3\n");
show(&stu3);
strcpy(stu3.name, "liming");//对字符串类型要用字符拷贝来修改
stu3.age = 20;//构体普通变量通过“ .’ 运算符来修改;
printf("修改后的stu3\n:");
show(&stu3);
struct student *p=&stu2;//指针p保存stu2的地址
strcpy(p->name,"wanghong");//或strcpy((*p).name,"wanghong"),修改stu2的name,要用”->“运算符来修改;
p->age=30;//结构体指针变量通过"->"访问它的成员
printf("修改后的stu2\n:");
show(&stu2);
}
运行结果为:
二、typedef
typedef 数据类型 新的数据类型:给类型起别名;
typedef unsigned long long int unit64//给unsigned long long起了一个别名叫unit64
typedef unsigned long int unit32//给unsigned long起了一个别名叫unit32
unit64 a;//a的数据类型为unsigned long long int
unit32 b;//b的数据类型为unsigned long int
typedef int * Pint;//数据类型
区分:
Pint i,j;// i,j的数据类型为int *
# define PINT int *;//宏是替换
PINT x,y;//x的数据类型为int *,y的数据类型为int.
1、识别typedef:(1)删除typedef,查看变量类型;(2)加上typedef,该变量提升为该数据类型。
例:
typedf int Arr[10];
Arr a;//定义了一个int型数组长度为10的数组,数组名为a;
typedef int (*p)(int,int);
P b;//定义了一个变量b ,返回值为int型函数为两个int型的参数的函数指针;
2、用typedef给结构体类型起别名
好处在使用结构体时可以简写,还可以避免写错。
例:
struct student
{
char name[20];
int age;
};
struct student stu;
用typedef给结构体类型起别名:
typedef struct student student;
student stu;
C++中通常使用的方法:
typedef struct student
{
char name[20];
int age;
}student;
student stu;