函数形参(int*a)与(int&a)区别,并且举例说明
时间: 2024-02-12 12:05:38 浏览: 32
函数形参 `int* a` 和 `int& a` 都可以用来传递参数,但它们的本质是不同的:
- `int* a` 表示传递一个指向 `int` 类型的指针,函数内部通过解引用指针获取传递的参数值。
- `int& a` 表示传递一个 `int` 类型的引用,函数内部直接使用引用获取传递的参数值。
下面举例说明它们的区别。
```
void func1(int* a) {
*a = 10;
}
void func2(int& a) {
a = 20;
}
int main() {
int x = 0;
func1(&x);
cout << x << endl; // 输出 10
func2(x);
cout << x << endl; // 输出 20
return 0;
}
```
在 `main` 函数中,先调用了 `func1(&x)`,通过传递指针的方式将 `x` 的值修改为了 10,因为 `func1` 函数内部使用解引用指针的方式获取传递的参数值。接着调用了 `func2(x)`,通过传递引用的方式将 `x` 的值修改为了 20,因为 `func2` 函数内部直接使用引用获取传递的参数值。
在实际开发中,使用指针作为函数形参的情况更为普遍,因为指针可以为空,而引用则必须指向一个已经存在的对象。但是,如果需要在函数内部修改传递的参数值,使用引用会更加方便和直观。
相关问题
传入函数形参为int **a,那么如何往数组a里添加元素
如果传入函数形参为int **a,那么a是一个指向指针的指针,可以通过以下方式往数组a里添加元素:
1. 定义一个新的整型数组b,并将需要添加的元素赋值给b。
2. 通过动态内存分配函数malloc为a分配内存空间,使其指向一个指针p。
3. 将p指向b所在的内存空间。
示例代码:
```c++
void add_element(int **a, int element) {
// 定义一个新的整型数组b
int *b = new int[1];
b[0] = element;
// 为a分配内存空间,使其指向一个指针p
int **p = (int**)malloc(sizeof(int*));
*p = b;
// 将p指向b所在的内存空间
*a = *p;
}
int main() {
int **a = (int**)malloc(sizeof(int*));
add_element(a, 10);
// 现在a指向的数组里已经有一个元素10了
return 0;
}
```
int *p=a;与int *p=&a;有什么区别?
在C++中,int *p = a; 和 int *p = &a; 这两个语句有显著的区别。
int *p = a; 表示将一个整型数组a的首地址赋值给一个指向整型数据的指针p。此时,p指向的是数组a的第一个元素的地址。
而 int *p = &a; 表示将一个指向整型数组a的指针赋值给一个指向整型数据的指针p。此时,p指向的是整个数组a的地址。
换句话说,int *p = a; 可以用来遍历整个数组a,而 int *p = &a; 通常用于传递整个数组a的地址给函数,或者用于在函数中操作整个数组a。