传形参的时候为什么已经是传的指针了 还要加取地址符号 传的指针的话不是已经可以让所指向的值改变了吗 取地址不是相当于取的这个指针的地址吗
图片不完整,要看s e的定义。如果s e不是指针,那么参数需要指针,就要取地址。
#include<stdio.h>
int main()
{
int a=2,b=3;
int * af,* bf;
void exchange(int *aa,int *bb);
af=&a;
bf=&b;
printf("a=%d,b=%d,af=%d,bf=%d\n",a,b,*af,*bf);
exchange(af,bf);
printf("a=%d,b=%d,af=%d,bf=%d\n",a,b,*af,*bf);
}
void exchange(int *aa,int *bb)
{
int i;
i=*bb;
*bb=*aa;
*aa=i;
}
对于问题中的形参问题,其实是一个关于指针传参的问题。当我们以指针的形式作为参数传递时,实际上传递的是该指针所指向的内存地址,也就是说,我们在函数中对该指针所指向的内存进行了修改,原变量的值也会被改变。但是,如果我们直接将指针作为参数传递,实际上传递的是该指针的值,即内存地址,而函数内部的操作只是对该地址的拷贝所指向的内存的修改,并没有修改原变量所指向的内存。因此,我们需要将该指针的地址传递给函数,这样函数使用该指针时,就可以通过该地址找到原变量所指向的内存,并将其修改。因此,需要使用取地址符号(&)。
以下是一个简单的示例代码,说明指针传参时添加取地址符号的必要性:
#include <stdio.h>
void changeValue(int* ptr) {
*ptr = 20;
}
int main() {
int num = 10;
printf("num = %d\n", num); // 输出原变量值
changeValue(&num); // 传递指针的地址
printf("num = %d\n", num); // 输出修改后的值
return 0;
}
输出结果为:
num = 10
num = 20
可以看到,只有当指针传参时添加了取地址符号&,函数中对该指针所指向的内存的操作才能作用于原变量。如果没有添加取地址符号,函数内部操作的是指针所指向的内存的拷贝,这对原变量不会有任何影响。