![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
上QQ阅读APP看书,第一时间看更新
10.2.3 用指向结构体的指针作为函数参数
接着上面的代码,做一个结构体指针作为函数参数的演示:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p201_86108.jpg?sign=1739353444-Ye5arfwYEbzfBg8ezfhD3DBVsZ4k9aW6-0-c93efd2e57b51e7f88f4b3e9701956ef)
通过上面的代码能够看出,虽然函数的参数传递是值传递,但只要传递指针作为参数到函数中,就可以通过该指针来修改指定内存中的内容,这种修改就反馈到调用者函数如main函数中。当然,可以把整个结构体内容通过参数全部传递到函数中。是怎样做的?看如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p202_86110.jpg?sign=1739353444-eYZEg9om3qKGqAZaAwHUsoHOr6SdVie9-0-cebb93d51a2979454a6b7fbf0f3b907e)
在上面这段代码中,通过设置断点调试观察,可以看到,func1函数中的d变量(形参)地址和stuArr[0](实参)地址并不同,那么若在func1函数中改变了形参d的值,当该函数调用执行完毕并返回后,改变的结果并不会反馈到stuArr[0]中,这一点与将指向结构体的指针作为函数参数完全不同。
同时也要注意,这种把一个完整的结构体变量作为参数传递虽然合法,但结构体变量(结构体数组元素)的所有成员数据要全部复制到函数中,开销很大,既费时间又费空间,影响程序运行效率,所以,最好用指针作为函数参数,能提升程序执行效率。关于这种传参方式的开销和效率话题,在第2部分C++语言中还会有非常详细的论述。