struct,typedef struct结构体

xiaoxiao2021-02-28  53

一.struct 结构体框架 : 

struct    类型名

{        

}

例:struct Student

{

char name[20];

int age;

};

结构体自定义数据类型,定义完成后等同于内置类型。

1.结构体不能定义一个自身的普通成员,但可以定义一个指向自身的指针。

例:

struct Student

{

char name[20];

int age;

};

struct A

{

struct Student e;    //ok

struct B f;            //error B未定义

struct A g;          //error,因为无法确定g的大小,不能给它分配内存空间

struct A *p;        //ok

};

2.结构体普通变量通过"."号访问它的成员,而结构体指针通过"->"号访问它的成员。

struct Student

{

char name[20];

int age;

};

struct Student  stu1;//stu1的name和age为随机值

struct Student  stu2={"zhang"};//name=zhang,age=0 因为stu2为聚合类型

struct Student  stu3={"li",25};

若要将stu3的age变为30   进行操作  stu3.age=30;

若要将stu3的name变为"wang"   进行操作strcpy(stu3.name,"wang");

struct Student *pstu=&stu2;

若要将stu2的age变为35      进行操作pstu->age=35//也可以(*pstu).age=35;一般用"->"

若要将stu2的name变为"sun"   进行操作strcpy(pstu->name,"sun");//也可以strcpy((*pstu).name,"sun");一般用"->"

例:

#include <stdio.h> #include<string.h> struct Student { char name[20]; int age; }; void show(struct Student *s) { printf("name:%s\nage:%d\n\n",s->name,s->age); } int main() { struct Student stu1;//stu1的name和age为随机值 struct Student stu2={"zhang"};//name=zhang,age=0 因为stu2为聚合类型 struct Student stu3={"li",25}; printf("stu1:\n"); show(&stu1); printf("stu2:\n"); show(&stu2); printf("stu3:\n"); show(&stu3); //若要将stu3的age变为30 进行操作 stu3.age=30; //若要将stu3的name变为"wang" 进行操作strcpy(stu3.name,"wang"); stu3.age=30; strcpy(stu3.name,"wang"); printf("修改后的stu3:\n"); show(&stu3); struct Student *pstu=&stu2; //若要将stu2的age变为35 // 进行操作pstu->age=35也可以(*pstu).age=35; //若要将stu2的name变为"sun" //进行操作strcpy(stu2->name,"sun");也可以strcpy((*pstu).name,"sun"); pstu->age=35; strcpy(pstu->name,"sun"); printf("修改后的stu2:\n"); show(&stu2); return 0; }

结果:

二.typedef

typedef 数据类型 新数据类型     //它用于类型定义,就相当于给一个类型起一个新名称

typedef unsigned long long int unit64;        //给unsigned long long int 起新名称为unit64

unit64 a;            //变量a的类型unsigned long long int 

区分:

typedef  int * Pint;

#define  PINT int *

Pint i,j;        //i,j的类型都为int *

PINT x,y;     //x的类型为int * ,y的类型为int 

typedef int Arr[10];

Arr a;      //定义一个长度为10的int 数组,数组名为a

例:

typedef int Arr[10]; int main() { Arr a; printf("%d\n",sizeof(a)); return 0; }

结果:

 typedef int (*pfun)(int ,int);

pfun p;       //变量p为一个返回值int,函数形参为两个int的函数指针

例:

int Max(int a,int b) { return a>b?a:b; } typedef int (*pfun)(int,int); int main() { pfun p=Max; printf("%d\n",p(2,6)); return 0; }

结果:

用typedef 简略结构体名称

例:struct Student

{

char name[20];

int age;

};

定义结构体变量时要加上struct 比较麻烦

struct Student e;

为了简略用typedef 给struct Student起新名称为Student

typedef struct Student Student;

此时定义结构体变量时为 Student e;

例:

struct Student { char name[20]; int age; }; typedef struct Student Student; int main() { Student e={"wang",23}; printf("name:%s\nage:%d\n",e.name,e.age); return 0; }

结果:

在C++中通常使用

typedef struct Student

{

char name[20];

int age;

}Student;          //Student为给struct Student起的新名称

例:

typedef struct Student { char name[20]; int age; }Student; int main() { Student e={"wang",23}; printf("name:%s\nage:%d\n",e.name,e.age); return 0; }

结果:

转载请注明原文地址: https://www.6miu.com/read-2624953.html

最新回复(0)