C语言第10题:结构体知识 +结构体作函数参数(使用指针提高效率)

    科技2022-07-13  125

    注意上面的struct stduent { char name[100]; int age; } 只是定义了一种类型,并不是变量,正式定义变量是在下面开辟空间的时候 不能直接使用结构体类型的数组进行->操作,->是针对指针类型而言的。 定义的是指针类型的char *name; 所以在只是一个地址信息,在使用的时候需要先用malloc进行内存分配才可以进行使用


    这里有一个重点内容,就是结构体使在堆区开辟的,然后对于结构体里面的成员再进行堆去分配,那么就出现了嵌套的使用情况,那么在释放的时候,我们需要先对局部的进行释放然后在释放结构体整个所占用的内存,如果顺序反了,会出现这样的情况,就会出现重复释放内存的错误,本来整个结构体已经释放内存了,那么整个局部都没了,然后局部再进行释放,肯定要出现错误的。

    #include<stdio.h> #include<string.h> #include<stdlib.h> #pragma warning(disable:4996) //注意这一句的使用,可以解决C语言中出现的一些兼容性问题 struct D { char name[10]; int age; }; void print_student(const struct D *s) //一般来讲,不要把结构变量作为函数的参数传递(因此建议使用地址)为了防止数值被改变一般可以使用constt进行保护,因为这里只是使用,并没有进行修改 { printf("name = %s,age = %d\n",s->name,s->age); printf("\n"); } //类似函数的形参意思(所以这里是不能进行修改的) //void set_student(struct D s, const char *name, int age) //{ // strcpy(s.name,name); // s.age = age; //} //类似函数的地址传递的意思(所以这里是可以进行修改的) void set_student(struct D *s, const char *name, int age) { strcpy(s->name, name); s->age = age; } int main() { struct D st = { "Tom",20 }; set_student(&st, "Mike", 100); //类似函数的形参意思(所以这里是不能进行修改的) print_student(&st); system("pause"); return 0; } //指针作为参数,只需要传递一个地址,所以代码效率很高 //结论就是当一个结构做为函数的参数时候,尽量使用指针,而不是使用结构变量,这样代码效率很高。
    Processed: 0.012, SQL: 8