用C语言说明结构指针的动态内存分配

结构指针包含整个结构的加法。

它用于创建复杂的数据结构,例如链表,树,图等。

可以使用称为箭头运算符(->)的特殊运算符来访问结构的成员。

宣言

以下是C编程中结构指针的声明-

struct tagname *ptr;

例如:struct学生* s;

存取中

下面说明如何访问结构的指针。

Ptr-> membername;

例如-s-> sno,s-> sname,s-> marks;

例子1

以下是一个C程序,解释了C编程中结构的动态内存分配-

#include <stdio.h>

#include <stdlib.h>

struct person {

   int age;

   float weight;

   char name[30];

};

int main(){

   struct person *ptr;

   int i, n;

   printf("输入人数: ");

   scanf("%d", &n);

   // 为n个结构体分配内存

   ptr = (struct person*) malloc(n * sizeof(struct person));

   for(i = 0; i < n; ++i){

      printf("分别输入姓名和年龄: ");

      // 要访问第一结构人的成员,

      // ptr->name and ptr->age is used

      // 要访问第二个结构人的成员,

      // (ptr+1)->name and (ptr+1)->age is used

      scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);

   }

   printf("Displaying Information:\n");

   for(i = 0; i < n; ++i)

      printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);

   return 0;

}

输出结果

执行以上程序后,将产生以下结果-

输入人数: 1

分别输入姓名和年龄: bhanu 24

Displaying Information:

Name: bhanu Age: 24

例子2

考虑关于指针和结构的另一个示例,其中,给出了一个用于演示指针和结构的C程序。

#include<stdio.h>

//Declaring outer and inter structures//

struct Manager{

   char Name[15];

   int Age;

   char Gender;

   float Level;

   char Role[50];

   char temp;

   }m[20];

void main(){

   //Declaring variable for For loop and pointer variable//

   int i;

   struct Manager *p;

   //Defining Pointer//

   p=&m;

   //Reading User I/p//

   for (i=1;i<3;i++){//Declaring function to accept 2 manager's data//

      printf("Enter the Name of manager %d : ",i);

      gets(p->Name);

      printf("Enter the Age of manager %d : ",i);

      scanf("%d",&p->Age);

      scanf("%c",&p->temp);//Clearing Buffer//

      printf("Enter the Gender of manager %d : ",i);

      scanf("%c",&p->Gender);

      //scanf("%c",&p->temp);//Clearing Buffer//

      printf("Enter the level of manager %d : ",i);

      scanf("%f",&p->Level);

      scanf("%c",&p->temp);//Clearing Buffer//

      printf("Enter the role of manager %d : ",i);

      gets(p->Role);

      p++;

   }

   //Defining Pointer one more time to print output//

   p=&m;

   //Printing O/p//

   for (i=1;i<3;i++){

      printf("The Name of Manager %d is : %s\n",i,p->Name);

      printf("The Age of Manager %d is : %d\n",i,p->Age);

      printf("The Gender of Manager %d is : %c\n",i,p->Gender);

      printf("The Level of Manager %d is : %f\n",i,p->Level);

      printf("The Role of Manager %d is : %s\n",i,p->Role);

      p++;

   }

}

输出结果

执行以上程序后,将产生以下结果-

Enter the Name of manager 1 : Hari

Enter the Age of manager 1 : 55

Enter the Gender of manager 1 : M

Enter the level of manager 1 : 2

Enter the role of manager 1 : Senior

Enter the Name of manager 2 : Bob

Enter the Age of manager 2 : 60

Enter the Gender of manager 2 : M

Enter the level of manager 2 : 1

Enter the role of manager 2 : CEO

The Name of Manager 1 is : Hari

The Age of Manager 1 is : 55

The Gender of Manager 1 is : M

The Level of Manager 1 is : 2.000000

The Role of Manager 1 is : Senior

The Name of Manager 2 is : Bob

The Age of Manager 2 is : 60

The Gender of Manager 2 is : M

The Level of Manager 2 is : 1.000000

The Role of Manager 2 is : CEO

以上是 用C语言说明结构指针的动态内存分配 的全部内容, 来源链接: utcz.com/z/325048.html

回到顶部