C中Struct和Typedef Struct的前向声明及区别
本篇文章将解释 struct
的概念和 typedef
关键字的使用。 我们还将在 C 中看到前向声明的概念。
让我们从创建一个 C 项目开始。
创建一个 C 项目
- 第一步是安装编译器。 下载和安装 C 编译器的步骤。
-
在下一步中,通过单击菜单栏中的文件,用 C 语言创建一个空项目。
- 编译前保存文件。
-
执行代码。 通过点击编译和运行。
-
将出现一个执行屏幕。
C语言中的结构体
struct
在C语言中用于对相关的数据成员进行分组。 结构中的成员没有相同的数据类型,并且该组包含保存在一个地方的不同变量。
正如我们所知,该数组具有相同类型的成员,但在结构中,数据成员可以是不同类型,如 int 、float 和 char。 下面的代码片段将描述如何用 C 语言创建一个结构体。
在这段代码中,我们通过编写结构名称及其变量在 main 函数的局部范围内声明了变量。
代码示例:
#include <stdio.h>
struct Student { // Structure declaration
int rollno; // Member (int variable)
char gender; // Member (char variable)
}; // End the structure with a semicolon
int main()
{
struct Student s1; // Making a variable of a struct
s1.rollno = 3; // assigning value to every member using dot operator
s1.gender = 'M';
printf("The name and gender of a student is %d and %c", s1.rollno, s1.gender);
}
输出:
The name and gender of a student is 3 and M
我们将在以下代码中声明全局范围内的变量。
代码示例:
#include <stdio.h>
struct Student { // Structure declaration
int rollno; // Member (int variable)
char gender; // Member (char variable)
} s1; // Declared a variable s1 before ending the struct with a semicolon
int main()
{
s1.rollno = 3; // calling a member using a variable
s1.gender = 'M';
printf("The name and gender of a student is %d and %c", s1.rollno, s1.gender);
}
输出:
The name and gender of a student is 3 and M
同样,这将给出相同的输出,但在上面的代码片段中,我们已经全局声明了变量 s1。 我们不必在 main() 函数中定义结构。
C 中的 typedef
C 语言中使用 typedef
将我们现有的数据类型重命名为新数据类型。
语法:
typedef <existing_name> <alias_name>
首先我们要写 typedef
的保留字,然后是C语言中已有的名字,还有我们要赋值的名字。 使用 typedef
后,我们将在整个程序中使用 alias_name。
代码:
#include <stdio.h>
void main()
{
typedef int integer; // assigning int a new name of the integer
integer a= 3; // variable is declared by integer
integer b= 4;
printf("The values of a and b are %d and %d", a,b); // print value of a and b on the screen
}
输出:
The values of a and b are 3 and 4
C 中的 typedef 结构
我们已经看到,我们必须在 main()
函数中编写整个结构定义。 我们可以使用 typedef
将旧类型替换为新类型,而不是每次都编写 struct student。
Typedef 帮助我们用 C 语言创建我们的类型。
代码示例:
#include <stdio.h> // including header file of input/output
#include <string.h> // including header file of string
typedef struct Books { // old type
char title[30]; // data members of the struct book
char author[30];
char subject[50];
int id;
} Book; // new type
void main() {
Book b1; // variable of a new type
strcpy( b1.title, "C Programming"); // copy string in title
strcpy( b1.author, "Robert Lafore"); // copy string in author
strcpy( b1.subject, "Typedef Struct in C"); // copy string in subject
b1.id = 564555; // assigning id to variable
printf( "Book title is : %s\n", b1.title); // printing book title on screen
printf( "Book author is : %s\n", b1.author);
printf( "Book subject is : %s\n", b1.subject);
printf( "Book id is : %d\n", b1.id);
}
输出:
Book title is : C Programming
Book author is : Robert Lafore
Book subject is : Typedef Struct in C
Book id is : 564555
在上面的代码中,我们在分号之前的结构末尾定义了一个新的结构类型。 然后,我们在 main()
函数中使用了这个新类型。
这个 typedef
减少了每次在 main()
函数中定义 struct 来创建变量的工作量。
C 中的前向声明
前向声明是在 Struct 的实际定义之前的声明。 定义不可用,但由于前向声明,我们可以引用声明的类型,这是一种预先声明。
此方法用于定义和声明函数。 我们可以在顶部声明它并在底部定义它,而不是在 main() 函数之上定义一个函数,称为前向声明。
代码示例:
#include <stdio.h>
int add(int x , int y); // (prototype)function declaration
void main()
{
int n1,n2,sum;
scanf("%d %d", &n1, &n2); // taking numbers from user
sum= add(n1,n2); // call to the add function
printf("The sum of n1 and n2 is %d ", sum); // display sum on the screen
}
int add(int x , int y) // function definition
{
int result;
result= x+y;
return result; // returning the result to the main function
}
上面的代码片段表明我们已经在 main()
函数的顶部声明了一个函数原型。 我们在定义它之前在 main 中调用了 add()
函数,但是它可以正常工作,因为原型已经被定义了。
这是由于前向声明。
输出:
4 5
The sum of n1 and n2 is 9
相关文章
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:181 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。
C 语言中的 extern 关键字
发布时间:2023/05/07 浏览次数:114 分类:C语言
-
本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量
C 语言中的 #ifndef
发布时间:2023/05/07 浏览次数:186 分类:C语言
-
本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。