C语言编程入门——结构体(上)



在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

结构体是自己定义的结构类型,为以后创建链表结点作铺垫。

定义结构体的三种方式:

# include <stdio.h>

//第一种方式
struct Student_1 //struct为定义结构体,Student_1为结构体名称,相当于int,变量在main()函数中定义,推荐使用。
{
	int age;
	char sex;
	float score;
};

//第二种方式
struct Student_2
{
	int age;
	char sex;
	float score;
} st2; //在定义结构体的同时定义了变量,相当于int i; 不推荐使用。

//第三种方式
struct //定义结构体变量没有写结构体名称,不推荐使用。
{
	int age;
	char sex;
	float score;
} st3;

int main(void)
{
	Student_1 st1;

	return 0;
}

结构体示例:

/*
	结构体的实质是根据需要自己定义一种复合的数据类型。
*/
# include <stdio.h>

struct Student //定义结构体,Student为结构体名,即为新数据类型名。
{
	int age; //定义结构体中的每一个成员。
	char sex;
	float score;
}; //定义的是一种新的复合数据类型,在定义结构体时分号不能省

int main(void)
{
	struct Student st1 = {19, 'F', 66.6}; //为结构体中的变量赋值。
	Student st2 = {20, 'F', 99}; //定义时结构体名即为变量类型,此语句类似于int i;
				     //但为表明定义的变量为结构体,前最好写上struct,即struct + 变量类型 + 变量名。

	return 0;
}

结构体的赋值与输出:

# include <stdio.h>

struct Student
{
	int age;
	char sex;
	float score;
}; 

int main(void)
{
	struct Student st1 = {19, 'F', 66.6}; //初始化,定义的同时赋初始值,且只能在定义的同时整体赋值。
	struct Student st2; //若在定义时没有赋值,则只能单项赋值,赋值格式为:结构体名.成员名 = X值。
	st2.age = 20;
	st2.sex = 'm';
	st2.score = 99;

	printf("%d, %c, %f\n", st1.age, st1.sex, st1.score); //结构体的输出。
	printf("%d, %c, %f\n", st2.age, st2.sex, st2.score);

	return 0;
}

结构体中每一个成员的表示:

# include <stdio.h>

struct Student
{
	int age;
	char sex;
	float score;
}; 

int main(void)
{
	struct Student st = {30, 78, 'F'};
	struct Student * pst = &st; //定义pst为结构体类型指针变量并赋值结构体变量st的地址。

	st.age = 20; //第一种方式:结构体变量名.成员名
	pst->age = 25; //第二种方式:指针变量名->成员名
	pst->score = 88.8F; //88.8在C语言中默认是double类型,若希望一个实数是float类型,则应在实数末尾加F或f,即88.8是double类型,88.8F或88.				    //8f是float类型。

	printf("%d, %f\n", pst->age, st.score); //两种方式是等价的

	return 0;
}
/*
	pst->age 在计算机内部会被转化成(*pst).age,这就是->的含义。
	所以,pst->age 等价于(*pst).age,即st.age。
*/

结构体示例:

# include <stdio.h>

typedef struct Student //typedef 定义结构体类型。
{
	char name[20];
	int age;
	float score;
} Stu, * pStu; //Stu 等价于 struct Student,pStu 等价于 struct Student * ,用于快速定义。

int main(void)
{
	Stu st;
	pStu pst;

	pst = &st;

	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 20:04:18

C语言编程入门——结构体(上)的相关文章

C语言编程入门——指针(上)

指针,是C语言的灵魂,也是C语言与其他高级编程语言不同的地方,它可以灵活的操作内存,同样,也会带来很多问题,需要安全的使用指针. 指针变量是指存放变量地址的变量,刚开始学可能会有点困难,需要多多理解. 指针常见错误1: # include <stdio.h> int main(void) { int * p; //定义int类型变量指针p int i = 3; *p = i; //此语句错误,*p未初始化,p存放了未知的地址,指向了未知的变量,如果被i修改,则会导致错误. printf(&qu

C语言编程入门——函数(上)

函数是结构化编程语言中最重要的组成部分,模块独立化的基本单位. 函数的声明: # include <stdio.h> void f(void); //函数的声明,即声明f是一个函数. void g(void); void f(void) { printf("哈哈!\n"); printf("哈哈!\n"); printf("哈哈!\n"); } int main(void) { f(); f(); g(); return 0; } v

C语言编程入门——循环(上)

循环结构,常用的有for循环和while循环. for循环求1到100的和: # include <stdio.h> int main(void) { int i; int sum = 0; for (i=1;i<=100;++i) //for循环控制sum = sum + i;语句,执行顺序:1. i=1; 2. i<=100; 3. sum = sum + i; 4. ++i;(++i标志着一次循环结 //束) 5. i<=100 sum = sum + i; print

C语言编程入门——数组(上)

数组是最重要的数据结构之一,所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量. 数组的赋值与输出: # include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; //数组名a后跟中括号[],赋值用大括号{},并以逗号隔开.5表示数组a中有5个元素

Golang 入门 : 结构体(struct)

Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和一个类型. 结构体的目的就是把数据聚集在一起,以便能够更加便捷地操作这些数据.结构体的概念在 C 语言里很常见,被称为 struct.Golang 中的结构体也是 struct.Go 语言中没有类的概念,因此在 Go 中结构体有着更为重要的地位.结构体是复合类型(composite types),当

《Go语言编程入门》视频课程开课了

作为拥有多年工作经验的运维老鸟,我没有选择运维常用的Python作为我今后的主要使用语言.Python编写运维程序的开发效率虽然很高,但随着代码量的增大,以及Python的缩进式语法结构,可读性和维护性并不很高.加之Python本身的设计,并不原生支持多线程多核,我考虑到当程序代码达到一定规模时,必然会考虑它的执行效率和维护成本.最终放弃了Python,选择语言的过程中被Google新出的Go语言吸引了.Go本身脱胎于C,语法和C比较像,我本身就一直学习和编写C和PHP程序,习惯了大括号的语法结

9.Go语言基础之结构体

Go语言中没有类的概念,也不支持"类"的继承等面向对象的概念. Go语言中通过结构体的内嵌再配合接口,比面向对象具有更高的扩展性和灵活性. 1.类型别名和自定义类型 1.1自定义类型 在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义. //将MyInt定义为int类型 type MyInt int 通过Type关

Go语言基础之结构体

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义.例如: //将MyInt定义为int类型 type MyInt int 通过Type关键字的定义,

关于c语言中的结构体使用偏移量求值问题

最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题, 结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的; 首先我们先看一下nginx中的那个让我迷惑的地方 ev =    (event_t*)((char*)node - offsetof(event_t, timer)); 这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址 说明一下: event_t是一个结构体 node 也是一个结构体 timer