C语言中struct typedef和结构体指针的用法

 2024-01-23 01:03:01  阅读 0

,以及结构体指针的使用

它的意思是类型定义。 就是为了方便使用这个结构。具体的区别是:用法

使用示例1:在C中定义结构体类型时,如果要使用:

typedef struct Student
{
   int no;
   char name[12];
}Stu,student;

所以声明变量时可以: Stu Stu1; 或:stu2; (Stu 和两个别名)

用法示例 2:如果没有,传统上定义一个结构体:

struct Student
{
   int no;
   char name[12];
}Stu;

这时,就说明已经定义了一个结构体Stu变量。 如果要创建新的,必须使用stu1;

用法示例3:如果使用的话,这里就不用写了(所以不能stu1;)

typedef struct
{
   int no;
   char name[12];
}Stu;

用法示例 4:您还可以屏蔽复合类型,例如指针和数组。 每当您想要使用相同类型和大小的数组时,就定义一个数组,如下所示:

typedef char Line[81]; 

此时,Line类型代表一个有81个元素的字符数组。 使用方法例如:Line text, ;

结构体指针的使用

结构体指针用法1:

当一个结构被自引用时,这是一种错误的用法。 想象一下,引用成员 next 是另一个完整的结构,它也将包含它自己的成员 next。 第二个成员包含一个完整的结构,接下来它也将包含它自己的成员。 这样无休止地重复。 ,内存全部用完。 所以这是不合法的。

struct Student1
{
   int age;
   struct Student1 next;
};

正确的用法是:结构体是自引用的,只能自引用指针。 在确定结构体长度之前,编译器就已经知道了指针的长度,因此这种自引用是合法的。 结构的自引用在实现链表和树等高级操作时非常有用。

struct Student1
{
	int age;
	struct Student *next; 
};

关于结构指针使用的注意事项:这是不可能的。 虽然它代表一个结构体,但类型名称的声明是在最后定义的。 当声明 { } 时,内部无法识别类型。

typedef struct 
{
	int age;
	Student1 *next; 
}Student1,*StudentPtr;

结构体指针用法2:

注意,此时它是{}的别名,也是一个指针

typedef struct Student1
{
	int age;
	Student1 *next; 
}Student1,*StudentPtr;

我使用的时候出现了一个有趣的现象。 如果不手动分配内存,则无法使用结构体指针。 当定义了两个结构体指针s1和s2时,两个结构体指针都没有分配内存,给其中一个赋值,然后使用它没有问题,输出也很好。

#include <stdio.h>
typedef struct Student1
{
	int age;
	 Student1 *next; 
}Student1,*StudentPtr;
int main()
{
	StudentPtr  s1;
	StudentPtr  s2;
	s1->age= 9;
	printf("%d",s1->age);
	return 0;
}

当尝试给另一个结构体指针赋值时,编译没有问题,程序崩溃。

正确的用法应该是

结构体指针需要初始化。 结构体指针的成员指针也需要初始化。 如果直接使用结构体,且结构体中有成员指针,也必须先初始化成员指针。

结构初始化

结构初始化与数组初始化非常相似。 一对大括号内的以逗号分隔的初始化值列表可用于初始化结构。 值按照结构成员列出的顺序写出。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码