14、结构体的基本使用

结构体的基本使用
#include <stdio.h>
#include <string.h>

//定义一个结构体类型
//1、struct是关键字
//2、合起来才是结构体类型
//3、结构体内部定义的变量不能直接赋值
//4、结构体只是一个类型,没有定义变量前,就是没有分配空间。没有空间,就不能赋值
struct Student
{
	int age;
	char name[50];
	int score;
};//有分号

int main(int argc, char const *argv[])
{
	//定义结构体变量
	//1、类型名 变量名
	struct Student stu;//别忘了struct关键字

	//结构体变量初始化,和数组一样,要使用大括号
	//2、只有在定义时才能初始化
	struct Student stu2 = {18, "mike", 59};

	//3、使用结构体成员,不能直接使用,需要借助结构体变量来引用
	struct Student tmp;
	//如果是普通变量,使用.运算符
	tmp.age = 18;
	//tmp.name = "mike";//name成员是数组名,数组名是常量,不能修改
	strcpy(tmp.name, "mike");
	tmp.score = 59;
	
	//如果是指针变量,使用->
	//如果是指针,指针有合法指向,才能操作结构体成员
	struct Student *p;
	p = &tmp;//注意要有合法的指向,不然就是野指针
	p->age = 18;
	strcpy(p->name, "mike");
	p->score = 59;

	//任何结构体变量都可用 . 或 -> 操作成员
	(&tmp) -> age = 18;
	//.这里需要加括号的原因,因为 . 的优先级比 * 高。
	//如果不加括号,会导致先执行p.age 再执行 *
	(*p).age = 18;
	p[0].age = 18;

	return 0;
}

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

struct Student
{
	int age;
	char name[50];
	int score;
};

//在定义结构体的同时定义了全局变量s1,s2
struct Student
{
	int age;
	char name[50];
	int score;
}s1 = {18, "mike", 59},s2;

//匿名结构体,定义结构体的同时定义了全局变量s3,s4
//但是由于匿名结构没有名字,所以只能使用一次
struct
{
	int age;
	char name[50];
	int score;
}s3,s4;

int main(int argc, char const *argv[])
{
	
	printf("%d, %s, %d\n", s1.age, s1.name, s1.score);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CCai_x/article/details/84074651
今日推荐