结构体

结构体又称自定义数据类型

将信息打包存放在一起而不是分开存放。

关键字   Struct

Struct  Student   定义一个结构体,结构体名首字母尽量大写。

{

    char name[20];

    int  age;

};

int 三个基本操作

int a=10;                   定义一个普通变量;

int arr[10]={0};           定义一个数组;            聚合类型初始化一部分剩余为零(数组,结构体)

int *P=&a;                  定义指针变量; 

类似于int数据类型,自定义数据类型也有类似三种操作。

哪些数据类型能用在结构体内部:

1、基本数据类型;

2、前面已经定义的结构体(不允许使用不完整的类型 ,例如:自己使用自己);

3、包含自身结构体定义的指针;

struct Student
{
	char name[20];
	int age;
};

struct A
{
	int a;  定义一个普通变量
	char b;
	short c;
	double *d; 定义一个指针
	struct Student e;   A之前定义的结构体(就是一个数据类型)
	//struct B f;//error  B在A之后定义的不能使用
	//struct A g;//error  不允许使用不完整类型(此时的A还没有定义完整)
	struct A *p;//ok    自身结构体定义的指针
	int i;
};

struct B
{
	int x;
	int y;
};

 

通过结构体访问结构体成员的方式:

1、结构体普通变量通过   "  .  "访问其成员

2、结构体指针变量通过   "  -> "(指向符)访问其成员

void Show(struct Student stu)
{
	printf("%s,%d\n",stu.name,stu.age);
}

void Show(struct Student *pstu)
{
	printf("%s,%d\n",(*pstu).name,(*pstu).age);
}
void Show(Student *pstu)
{
	printf("%s,%d\n",pstu->name,pstu->age);
}
int main()
{
	int a = 10;
	int *p = &a;
	int arr[10] = {0};

	struct Student stu1;
	struct Student stu2 = {"liubei"};//初始化一部分,则剩余部分为0
	stu2.age = 18;
	//如何给stu1中的name赋值
        //stu1.name = "caocao";//error  初始化才能赋值,不能直接给字符串fuzhi 
	strcpy(stu1.name,"caocao");//用字符串拷贝函数
	stu1.age = 20;
	
	//printf("%s,%d\n",stu1.name,stu1.age);输出stu1里的姓名和年龄
        //Show(stu1);也可以直接写成函数的形式

	struct Student *pstu = &stu1; 定义一个结构体类型的指针pstu存放stu1的地址
	(*pstu).age = 21;//对指针pstu解引用再访问age
	pstu->age = 22;//由于.的优先级比*高所以加括号,由于这样写不太方便,可以直接使用指向符
	Show(&stu1);

	return 0;
}
struct Student//设计
{
	int id;
	char name[20];
	int score;
	//int age;
	//int age = 18;//error不能在定义的时候直接初始化,只是定义了一个数据类型
};

int main()
{
	struct Student stu1,stu2;
	struct Student stu3;
	scanf("%d%s%d",&stu1.id,stu1.name,&stu1.score);
	scanf("%d%s%d",&stu2.id,stu2.name,&stu2.score);

	if(stu1.score > stu2.score)//输出分数高的学生信息
	{
		printf("%d,%s,%d\n",stu1.id,stu1.name,stu1.score);
	}
	else
	{
		printf("%d,%s,%d\n",stu2.id,stu2.name,stu2.score);
	}

	return 0;
}*/
typedef struct Student
{
	char name[20];
	int age;
}Student;//定义一个结构体并给他起一个别名Student 给新的数据类型起一个别名 等同下面的写法

//struct Student
//{
//	char name[20];
//	int age;
//};
//typedef struct Student Student; 先定义一个结构体再给他起别称

 

结构体内数据的访问
struct A
{
	int a;
	int *b;
};

struct B
{
	char c;
	struct A sd;
	int *e;
};

int main()
{
	struct B bb;
	struct B *pb = &bb;

	bb.c;
	bb.sd.a;
	bb.sd.b;
	bb.e;
	pb->c;
	pb->sd.a;
	pb->sd.b;
	pb->e;

	return 0;
}

??? 

void Show(Student *pstu)
{
	printf("%s,%d\n",pstu->name,pstu->age);
}

//输出结构体数组的内容
void Show(Student *arr,int len)
{
	for(int i=0;i<len;i++)
	{
		printf("%s,%d\n",arr[i].name,arr[i].age);
	}
}

int main()
{
	Student stu1 = {"liubei",20};
	Student *pstu = &stu1;
	Student arr[] = {{"liubei",19},{"caocao",20},"sunquan",18};
	arr[0].age = 23;

	Show(arr,sizeof(arr)/sizeof(arr[0]));//

	//Show(pstu);//?????Show(&stu1)

	return 0;
}
//3、typedef 类型定义
typedef unsigned long long int uint64;
typedef int* Pint;//加上typedef由变量变成数据类型
typedef int Arr[10];//整形数组这种数据类型
typedef int (*Pfun)(int,int);
#define PINT int*//只是字符替换

int Max(int a,int b)
{
	return a>b ? a : b;
}

int main()
{
	int a = 10;
	Pint c,d;
	PINT e,f;
	c = &a;
	d = &a;
	e = &a;
	//f = &a;//error//宏定义只是字符替换
	//unsigned long long int a = 100;
	//unsigned long long int b = 200;
	//uint64 c = 300;
	//uint64 d = 400;
	//Pint p1;//int *
	//Pint p2;//int *
	//Arr i;//
	//printf("%d\n",sizeof(i));
	//Pfun fun;
	

	return 0;
}
*/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值