struct,typedef struct结构体

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

结果:





  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值