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