自学内容网 自学内容网

C语言从头学37——struct 指针

       在前文学习结构体变量的声明时,曾介绍过结构体指针变量的使用。这里介绍结构体指针,目的是找出在函数中处理作为参数的结构体变量的方法。
一、先看一个普通结构体变量作为参数的程序

typedef struct { int a; } myInt; //定义结构体别名(别名优点:不用总想着写struct)
myPrint(myInt myint) //定义一个使用结构体变量做参数的函数
{
printf("a++前a=%i\n", myint.a);
myint.a++;
}
#include<stdio.h>
int main(void)
{
myInt myint = { 5 }; //声明结构体变量并赋初值
myPrint(myint); //调用函数;运行结果 a=5
printf("a=%i", myint.a); //看一下曾做过参数的结构体变量值;运行结果 a=5
getchar();
return 0;
}

       从上面这个小程序的运行结果看,结构体变量myint作为参数传入了myPrint函数,在myPrint函数中除了显示属性a的值外,还对a做了自增运算,但回到主程序再看变量myint属性a的值,结果a无动于衷,还是原来的值。分析原因,结构体变量作为参数传入函数时,函数内部得到的实际是一个原始值的副本。对副本做任何操作,原始值当然不会变。
二、结构体指针变量做函数参数情形
       当我们希望通过调用函数的方式对结构体变量进行处理,并希望结构体变量保留处理结果时,就需要使用结构体指针变量了。在前面学习《struct结构》时介绍了如何声明结构体指针,也学习了普通结构体变量调用属性用"."、结构体指针变量调用属性用"->",这些这里都会用到。
       我们把上面的程序做小的改动,将参数改成指针形式,函数体做相应改动,如下:

typedef struct { int a; } myInt; //定义结构体别名
myPrint(myInt* myint) //定义一个使用结构体指针变量做参数的函数
{
printf("a++前a=%i\n", myint->a);
myint->a++;
}
#include<stdio.h>
int main(void)
{
myInt myint = { 5 }; //声明结构体变量并赋初值
myPrint(&myint); //对myint取址成为指针进入函数;运行结果 a=5
printf("a=%i", myint.a); //再看一下曾做过指针参数的结构体变量值;运行结果 a=6
getchar();
return 0;
}

       从程序运行结果看出,当结构体变量以指针形式进入函数时,在函数内对结构体变量所进行的操作,结果会保留在变量中。
       结论:当我们希望某函数仅仅是使用一下结构体变量的数据,不希望函数对数据进行修改时,进入函数参数的形式选择普通结构体变量;如果目的就是对结构体变量中数据进行加工,那就选择指针型结构体变量作为参数。


原文地址:https://blog.csdn.net/m0_72128260/article/details/140644394

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!