C/C++函数的参数传递

C/C++函数的参数传递

参数可分为函数的实参和函数的形参,
但是注意这是两个不同地址空间的参数变量。
如下函数
下面展示一些 内联代码片

// A code block
int value;
void func(int param);

在代码段

func(value);//调用func函数并传入实参value

1.编译器或cpu会生成一个新的变量 :int param,这个变量就是func函数的形参。
2.将value传递给函数func的过程在编译器眼里就是将value这个内存空间地址中的值传给func函数中对应的形参
3.param对应接收传进来的内存空间地址上对应的值 用代码理解就是param=value;
4.后续在func函数内部针对param变量的任何修改操作都不会影响value,因为他俩本就不是一个东东(不是一个地址空间的变量)

其实函数参数传递的过程就此一种,但是还有人说在C/C++的书上还介绍过指针传递和引用传递,有什么不同吗?其实没有不同只是在值传递的基础上多了一些“巧合”

// A code block
int* value = null;
int num = 35;
value = #
void func(int* param)
{
	*param = 35;
}

说来话长,很多人对指针望而生畏,其实不用,指针就是一种变量,和基本数据类型:int char flota是一样的,只不过是它长的特殊 type* 而已。变量就是一个内存空间上地址的体现,定义了一个变量,这个变量就能存储这个变量类型大小的数据,编译器在后续针对该变量的处理也会遵照该变量定义的类型。指针同理也是一个存储数据的地址空间,所以value = # 它就和num = 35;是一样的都是存储了一个数据(只不过指针存的那个数据是一个地址),当给指针赋值后就产生了2个地址一个地址是指针变量本身的地址(任何变量都有的在内存空间上的地址)另一个地址就是指针变量存储的那个数据地址(被理解成地址的数据num变量所在内存空间的地址)

那么(终于说到正题)

func(value );

传递的是什么?传递的是value内存储的数据(数据地址)在上面代码中赋值为null了在此也就是传递了null;

func(&num);

传递的是num变量的地址
在func内部形参param = num的地址,所以操作*param 就相当于在num变量的地址上做操作一样。

怎样在函数内部,将地址传给指针参数。通过指针参数带回。

#include <stdio.h>
 
void get_addresses(char **str_address, int **int_address) {
    char string[] = "Hello, World!";
    int number = 123;
 
    *str_address = string;
    //为啥不是str_address=string;
    //因为在参数传递的时候就是str_address = &str, 用str_address=string;就相当于为形参改了指向
    *int_address = &number;
}
 
int main() {
    char *str;
    int *num;
 
    get_addresses(&str, &num);
 
    printf("String: %s\n", str);
    printf("Number: %d\n", *num);
 
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值