欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struct,typedef struct结构体

程序员文章站 2022-05-12 16:29:27
...

一.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;
}

结果:

struct,typedef struct结构体

二.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;
}

结果:

struct,typedef struct结构体

 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;
}

结果:

struct,typedef struct结构体


用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;
}

结果:

struct,typedef struct结构体

在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;
}

结果:

struct,typedef struct结构体




相关标签: struct typedef