函数地址传参

函数地址传参最常见的形式就是:

#include stdio.h

int main(){

int i;  

int n=6;

int a[6]={7,5,3,4,12,54};

for(i=0;i<n;i++) printf("%d ",a[i]);  

printf("\n排序之后\n");  

Sort(a,n);  

相当于是sort(&a,n);

这里是将数组a的地址传递下去,接下来承接这个地址的函数

就是对这个地址中的值进行操作,所以一般使用这个地址传参

1.是想通过另一个函数比较复杂的操作,来改变本函数中的某一个值

2.因为这种方式用到了两种函数,所以实际上利用了形参和实参

for(i=0;i<n;i++)

printf("%d ",a[i]);  

return 0;}

void Sort(int b[],int n){ 

相当于是sort(char *b,int n)

这里用指针变量进行接收,相当于下面对b的操作都是对上面的地址中的值进行的操作

所以一般是需要对一个函数的值进行频繁复杂的更改,通过地址传参的方式将这个地址传递下来

另一个函数拿到这个地址,对地址中的值随时进行更改

但是也有的地址传参不是为了拿到地址值,对地址中的值进行更改,而是只是为了拿到这个参数值 

int i,j;  

int tmp=0;  

for(i=0;i<n;i++){  

for(j=0;j<n-1-i;j++){  

if(b[j]>b[j+1]){  

tmp=b[j];  

b[j]=b[j+1];  

b[j+1]=tmp;  


### C/C++ 中通过指针传递结构体参数 当在函数间传递结构体时,通常有两种方式:按值传递和按地址传递。按值传递会复制整个结构体对象,而按地址传递则只传递其内存位置。对于大型结构体来说,按地址传递可以显著提高性能并节省资源。 #### 使用结构体指针作为函数参数 为了高效地操作结构体,在调用函数时可传入该结构体的指针而非副本。下面是一个具体的例子来展示这一过程: ```cpp #include <iostream> using namespace std; /// 定义员工结构体 struct Employee { string name; double salary; }; // 修改工资的函数原型声明 void updateSalary(Employee* empPtr); int main() { // 创建一个Employee类型的实例 Employee e = {"John Doe", 7500}; cout << "Original Salary of " << e.name << ": $" << e.salary << endl; // 调用updateSalary函数并将e的地址作为实参传递 updateSalary(&e); cout << "Updated Salary of " << e.name << ": $" << e.salary << endl; } // 实现修改工资的功能 void updateSalary(Employee* empPtr) { (*empPtr).salary += 1000; // 或者更简洁写法 empPtr->salary += 1000; } ``` 上述代码展示了如何定义`Employee`结构体以及怎样利用指向它的指针去更新成员变量[^2]。这里的关键在于理解`&`运算符用于获取对象的地址,而`->`则是访问指针所指向的对象内的特定字段的方法之一。 #### 关键点说明 - **减少开销**:相比于直接拷贝整个结构体到栈上,传递指针仅需传输一个小得多的数值(通常是4字节或8字节),这使得程序运行更快且占用较少空间。 - **间接寻址**:使用箭头(`->`)操作符可以直接访问由指针指向的那个实际存储区域里的数据项;如果采用解引用加`.`的方式,则先要解开一层再找对应的成员[^3]。 - **安全性考虑**:尽管如此,程序员应当小心处理空悬指针等问题以免造成未定义行为或者崩溃错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值