C - 指针和结构

时间:2020-02-23 14:31:59  来源:igfitidea点击:

在本教程中,我们将学习在C编程语言中使用具有结构的指针。

我们学会了如何在结构教程中使用结构创建和工作。
随意检查出来。

创建一个结构

让我们开始创建一个结构变量 student如下所示。

//student structure
struct student {
  char id[15];
  char firstname[64];
  char lastname[64];
  float points;
};

现在我们将创建一个学生结构变量 std
为此,我们将写下以下代码。

//student structure variable
struct student std;

访问结构的成员

我们知道要访问我们使用的结构的成员 .操作员。

在以下示例中,我们正在访问学生结构的成员。

printf("ID: %s\n", std.id);
printf("First Name: %s\n", std.firstname);
printf("Last Name: %s\n", std.lastname);
printf("Points: %f\n", std.points);

构造指针

以下是为结构创建指针的语法。 struct tagName *ptrName;因此,要为学生结构创建指针,我们将写下以下代码。 struct student *ptr;

将结构变量分配给指针

我们使用以下语法将结构变量地址分配给指针。 ptrName = &structVarName;在以下示例中,我们正在分配结构变量的地址 std到结构指针变量 ptr
因此,PTR指向STD。 ptr = &std;

通过指针访问结构的成员

我们使用箭头运算符也称为成员选择运算符 ->通过指针变量访问结构的成员。

以下是通过指针访问结构的成员的语法。 ptrName->member在以下示例中,我们正在访问 firstname成员 student通过指针变量结构 ptrprintf("First Name: %s", ptr->firstname);

完整的代码

#include <stdio.h>
int main(void) {
    
  //student structure
  struct student {
    char id[15];
    char firstname[64];
    char lastname[64];
    float points;
  };
  
  //student structure variable
  struct student std;
  
  //student structure pointer variable
  struct student *ptr = NULL;
  
  //assign std to ptr
  ptr = &std;
  
  //get student detail from user
  printf("Enter ID: ");
  scanf("%s", ptr->id);
  printf("Enter first name: ");
  scanf("%s", ptr->firstname);
  printf("Enter last name: ");
  scanf("%s", ptr->lastname);
  printf("Enter Points: ");
  scanf("%f", &ptr->points);
  
  //display result via std variable
  printf("\nResult via std\n");
  printf("ID: %s\n", std.id);
  printf("First Name: %s\n", std.firstname);
  printf("Last Name: %s\n", std.lastname);
  printf("Points: %f\n", std.points);
  
  //display result via ptr variable
  printf("\nResult via ptr\n");
  printf("ID: %s\n", ptr->id);
  printf("First Name: %s\n", ptr->firstname);
  printf("Last Name: %s\n", ptr->lastname);
  printf("Points: %f\n", ptr->points);
  
  return 0;
}
Enter ID: s01
Enter first name: 
Enter last name: 
Enter Points: 8.44
Result via std
ID: s01
First Name: 
Last Name: 
Points: 8.440000
Result via ptr
ID: s01
First Name: 
Last Name: 
Points: 8.440000

我们可以代表学生结构变量 std在记忆中如下。

所以,当我们创建结构变量时 std它占用了147字节的内存空间。

|成员|数据类型|大小|存储位置|
| --- - | --- | - - | --- |
| id |char| 15字节| 1000到1014 |
|firstname|char| 64字节| 1015到1078 |
|lastname|char| 64字节| 1079到1142 |
|points|float| 4字节| 1143至1146 |

接下来我们有指针变量 ptr它保持内存地址1000即,存储地址 std结构变量。
因此,PTR指向STD。