迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C中Struct和Typedef Struct的前向声明及区别

作者:迹忆客 最近更新:2023/05/05 浏览次数:

本篇文章将解释 struct 的概念和 typedef 关键字的使用。 我们还将在 C 中看到前向声明的概念。

让我们从创建一个 C 项目开始。


创建一个 C 项目

  • 第一步是安装编译器。 下载和安装 C 编译器的步骤。
  • 在下一步中,通过单击菜单栏中的文件,用 C 语言创建一个空项目。

    创建新项目

    选择项目类型

  • 编译前保存文件。
  • 执行代码。 通过点击编译和运行。

    代码执行过程

  • 将出现一个执行屏幕。

    执行画面


C语言中的结构体

struct 在C语言中用于对相关的数据成员进行分组。 结构中的成员没有相同的数据类型,并且该组包含保存在一个地方的不同变量。

正如我们所知,该数组具有相同类型的成员,但在结构中,数据成员可以是不同类型,如 intfloatchar。 下面的代码片段将描述如何用 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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便