C语言中如何销毁结构体变量

如题所述

C语言没有销毁变量的举措,所以不能由程序员用什么语句来销毁结构体变量。和其他基本变量一样,全局结构体变量、static修饰的结构体变量的寿命都与程序的寿命一样长,无法改变;而声明在函数中的自动(auto)结构体变量,在函数被调用时创建,函数退出时自动销毁!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-08
C语言中的“结构体”其实就相当于其他高级语言中的“记录”,结构体的定义方法如下:

  例如:

Struct student

{ int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

};(注意最后的分号不能省略)。

   其中第一行的“student”是该结构体的名称,花括号里面的内容是结构体的成员名,这是声明结构体的一般形式。也可以在声明结构体的同时对它进行初始化,例如:

struct stu

{

int num;

char *nAME;

char sex;

float score;

}pupil[5]={

{101,"Tom",'M',45.8},

{102,"Mike",'M',62.5},

{103,"Chris",'F',92.5},

{104,"Rose",'F',87.6},

{105,"Nate",'M',58.8}

};

  该代码中的“pupil[5]”称为结构体数组,它属于结构体变量,在定义该变量的同时对它进行了初始化操作。我们也可以先声明结构体,然后再对它进行初始化操作。

例如:

#include <stdio.h>

int main()

{

struct student

{

char name[8];

int age;

char sex[4];

char depart[20];

float grade1,grade2,grade3;

}a;

float wage;

char c='Y';

if(c=='Y'||c=='y')

{

printf("\nName:");

scanf("%s", a.name);

printf("Age:");

scanf("%d", &a.age);

printf("Sex:");

scanf("%s", a.sex);

printf("Dept:");

scanf("%s", a.depart);

printf("Grade1:");

scanf("%f", &a.grade1);

printf("Grade2:");

scanf("%f", &a.grade2);

printf("Grade3:");

scanf("%f", &a.grade3);

wage=a.grade1+a.grade2+a.grade3;

printf("The sum of wage is %6.2f\n", wage);

}

return 0;

}

  该程序中定义了一个名为“student”的结构体,变量名为“a”,然后再后面“if”包含的符合语句中对该结构体进行初始化。在此,我们可以看出,对结构体的初始化,只能对它里面的每个成员分别初始化。

#include <stdio.h>

struct stu

{

int num;

char *name;

char sex;

float score;

}pupil[5]={

{101,"Tom",'M',45.8},

{102,"Mike",'M',62.5},

{103,"Chris",'F',92.5},

{104,"Rose",'F',87.6},

{105,"Nate",'M',58.8}

};

void avg(struct stu *ps)

{

int c=0,i;

float ave,s=0;

for(i=0;i<5;i++,ps++)

{

s+=ps->score;

if(ps->score<60) c+=1;

}

printf("s=%.3f\n",s);

ave=s/5;

printf("average=%.3f\ncount=%d\n",ave,c);

}

int main()

{

struct stu *ps;

ps=pupil;

avg(ps);

return 0;

}

  此程序是关于结构体指针变量作函数参数,这样可以提高程序的运行效率,程序中我们定义了一个“stu”的结构体,变量名为“pupil[5]”,并对其进行了初始化,在主函数中定义了一个该结构体的指针ps,将pupil赋值给ps,当函数avg()调用该结构体时,用指针ps来传递pupil的地址,从而,提高了该程序的效率。

  结构体与指针的结合使用,可以有效的解决现实生活中的很多问题,因此C语言中的指针和结构体应该能够熟练的掌握。本回答被网友采纳
第2个回答  2012-03-13
一个变量能不能销毁,和这个变量的类型是没有关系的,是和这个变量所在的内存到底是栈内存还是堆内存有关,栈内存可以理解为系统自己销毁,局部变量就是栈内存的。

堆内存是我们人为分配的,要销毁的。
比如你
void * a=(void *)malloc(4);
*(int *)a=4;
free(a);
a是堆内存变量,是要销毁的。
如果有说错的地方请指教。追问

能详细说一下,堆栈的区别与功能吗?

第3个回答  2012-03-08
变量不用销毁,当程序离开其作用域时,会自动销毁的。
第4个回答  2012-03-08
不用销毁,函数退出后空间就释放了。
相似回答