int *&a是如何获得的
时间: 2023-12-25 17:06:49 浏览: 95
`int *&a` 是一个指向指针的引用,可以通过如下方式获得:
```c++
void foo(int *&a) {
// do something
}
int main() {
int *p = new int(10);
foo(p); // 传递指向指针的引用
delete p;
return 0;
}
```
在上面的代码中,`foo` 是一个函数,它的参数是一个指向指针的引用 `int *&a`。在 `main` 函数中,创建了一个指向整型变量的指针 `p`,然后将 `p` 作为参数传递给 `foo` 函数。在 `foo` 函数中,可以通过 `a` 访问 `p` 所指向的整型变量,也可以修改 `p` 的指向,如:
```c++
void foo(int *&a) {
// 修改 p 指向
a = new int(20);
}
```
这样,在 `foo` 函数执行完之后,`p` 指向的就是一个新的整型变量,值为 `20`。需要注意的是,在使用指向指针的引用时,需要确保引用的指针是合法的,否则可能会导致错误或者异常。
相关问题
若有定义int a,*p=&i;则*&a等价于( )。
在定义 int a, *p=&a; 后,*&a 等价于 a,即取 a 的地址再取地址,再取值,最终得到的是 a 的值。这是因为 *& 这个操作符本质上是对一个指针进行解引用,也就是取指针指向的地址上的值,而 a 是一个整型变量,而不是指针变量,所以它的地址就是它本身,*&a 就相当于 *(&a),也就是对 a 取地址再取值,最终得到的就是 a 的值。
#include <stdio.h> void findMaxMin(int *a, int *max, int *min); void swap(int *a, int *b); int main() { int a[3]; int max, min; int *p1, *p2, *p3; printf("请输入3个整数:\n"); scanf("%d %d %d", &a[], &a[1], &a[2]); p1 = &a[]; p2 = &a[1]; p3 = &a[2]; findMaxMin(p1, &max, &min); printf("最大值为:%d,地址为:%p\n", max, &max); printf("最小值为:%d,地址为:%p\n", min, &min); swap(&max, &min); printf("交换后,最大值为:%d,最小值为:%d\n", max, min); return ; } void findMaxMin(int *a, int *max, int *min) { *max = *min = *a; if (*a > *(a + 1)) { *max = *a; *min = *(a + 1); } else { *max = *(a + 1); *min = *a; } if (*max < *(a + 2)) { *max = *(a + 2); } if (*min > *(a + 2)) { *min = *(a + 2); } } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
这段代码实现了输入3个整数,找出其中的最大值和最小值,并交换它们的值。其中函数 findMaxMin 用于找出最大值和最小值,函数 swap 用于交换两个数的值。在 main 函数中,通过指针获取数组中元素的地址,将地址作为参数传入函数 findMaxMin 中,得到最大值和最小值后再调用函数 swap 交换它们的值。最后输出交换后的最大值和最小值。
阅读全文