C函数参数传递*& 和*区别的研究

众所周知,&是取地址,函数参数前有&是传递地址,*是指针;那*&有什么用呢?下面先看一下众多网友的解释

对于int *&a:  

1.int*& a: a is a reference of pointer to int

  2.c++里面的引用,a是对另一个int *类型变量的引用;

  3.

<think>嗯,用户问的是C语言函数参数中的&L*L是否一样。我需要先回忆一下C语言中指针地址的相关知识。 首先,&L应该是取变量L的地址,而*L可能是指针的解引用。但作为函数参数的话,情况可能不同。比如在函数定义时,参数写成DataType *L,这时候在调用函数的时候可能需要传入&L,也就是将变量的地址传给指针参数。这种情况下,&L作为实参,*L作为形参的声明,它们的作用是传递地址,让函数内部能修改外部变量。 不过用户的问题可能是在函数参数里同时出现&L*L,比如在函数声明中参数是&L或者*L。这时候需要区分C++中的引用C语言中的指针。因为在C语言中没有引用,所以&L在参数中可能出现在函数调用时,而函数定义时的参数应该是指针类型。例如,如果函数定义为void func(Node *L),那么在调用时应该用func(&L),这里的&L是取地址,传给指针参数。 但用户的问题是问在函数参数&L*L是否一样。需要明确C语言函数参数不能直接使用&L作为形参,只有C++才有引用参数。所以可能在C语言中,函数定义时的参数只能是*L,而调用时传&L。所以它们的作用不同,一个是声明指针参数,一个是传递地址。 另外,可能用户看到某个代码里函数参数用了*L,而调用时用了&L,因此产生疑问。需要解释清楚,在C语言中,形参是指针类型时,实参需要用&取地址,这样函数内部才能通过指针修改原变量。 还需要注意,如果L本身已经是指针变量,那么传参时可能直接用L,而不需要&,这时候*L在函数内解引用。但具体情况要看变量类型函数定义。 总结一下,&L*L在函数参数中的角色不同:&L用于调用时传递地址,*L用于声明指针类型的形参。它们在C语言中不能互换,属于不同的用法。而C++中的引用参数则用&L作为形参,但那是C++的特性,C语言不支持。</think>在C语言中,函数参数里的`&L``*L`有本质区别**二者完全不一样**。以下是逐步分析: --- ### 1. `&L`的作用 - **含义**:取变量`L`的地址。 - **使用场景**:在**函数调用**时,将变量`L`的地址传递给函数。 - **示例**: ```c void func(int *ptr); // 函数声明(形参是int指针) int main() { int L = 10; func(&L); // 传递L的地址给函数(实参是&L) return 0; } ``` --- ### 2. `*L`的作用 - **含义**:声明一个指针类型的形参,或解引用指针。 - **使用场景**:在**函数定义**中声明指针参数,或在函数内部操作指针指向的值。 - **示例**: ```c void func(int *L) { // 形参是int指针(声明时用*L) *L = 20; // 解引用指针,修改L指向的值 } ``` --- ### 3. 关键区别 | | `&L` | `*L` | |----------|-------------------------------|-------------------------------| | **语法** | 取地址运算符 | 指针声明或解引用运算符 | | **位置** | 函数调用时作为实参 | 函数定义时作为形参,或函数内操作指针 | | **目的** | 传递变量地址给指针类型的形参 | 定义指针参数或操作指针指向的值 | --- ### 4. 常见误区 - **错误用法**: ```c void func(int &L); // C语言不支持引用(这是C++语法!) ``` C语言中没有引用(`&`作为形参是C++特性),因此函数参数不能写成`&L`。 - **正确用法**: ```c void func(int *L); // C语言中必须用指针 func(&L); // 调用时传递地址 ``` --- ### 5. 总结 - **`&L`用于传递地址**(函数调用时)。 - **`*L`用于声明指针参数**(函数定义时)或操作指针指向的值。 - 在C语言中,二者必须配合使用:通过`&L`传地址,用`*L`接收并操作。 如果有代码示例,可以进一步分析具体场景!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值