C语言中到底如何通过地址值的传送在被调函数中直接改变调用函数中变量的值,请解释详细一点
谢谢了,我想问一下,在C中不是只可以是实参将值传递给形参么?那这么来是不是可以理解为,如果实参传递给形参的值是个地址的话,我们就可以把运行后的形参的值又传递到实参里面呢?...
谢谢了,我想问一下,在C中不是只可以是实参将值传递给形参么?那这么来是不是可以理解为,如果实参传递给形参的值是个地址的话,我们就可以把运行后的形参的值又传递到实参里面呢?
展开
3个回答
展开全部
这个就是2种函数调用方式中的地址传递调用方式(另一种是传值方式)。
下面通过具体的实例来说明传地址调用方式:
#include<stdio.h>
void swap(int *p1, int *p2) // 交换两个整数——交换形参值(地址)
{ // 实际上是改变p1与p2所指向的地址
int *temp;
temp = p1;
p1 = p2;
p2 = temp;
printf("交换后:x=%d y=%d\n", *p1, *p2);
}
void main()
{
int x, y;
scanf("%d%d", &x, &y);
swap(&x, &y); // 调用swap函数的时候,是将变量x和y的地址传递进去的,也就是使形参p1和p2分别指向变量x和y的地址,改变的实际上还是x和y的值,只不过是通过地址的变换来实现的
printf("交换前:x=%d y=%d\n", x, y);
}
展开全部
哈哈,自然是不会变了,这是值传递,也就是将数值传给被调函数,要实现通过函数调用改变主调函数的变量值,要用数组传递或指针传递
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
void changeValue(int * pointer)
{
*pointer = 23;
}
int main()
{
int iNum;
int * iPointer;
iPointer = &iNum;
iNum = 10;
printf("%d\n",iNum);
changeValue(iPointer);
printf("%d\n",iNum);
}
1,LZ运行以上程序就应该可以明白了。
2,在changeValue的方法中,我们使用了一个int*,那么传递的就是一个地址,在方法里面我们将其内容进行改变,从而iNum的值也要进行改变。
3,希望对LZ所有帮助
void changeValue(int * pointer)
{
*pointer = 23;
}
int main()
{
int iNum;
int * iPointer;
iPointer = &iNum;
iNum = 10;
printf("%d\n",iNum);
changeValue(iPointer);
printf("%d\n",iNum);
}
1,LZ运行以上程序就应该可以明白了。
2,在changeValue的方法中,我们使用了一个int*,那么传递的就是一个地址,在方法里面我们将其内容进行改变,从而iNum的值也要进行改变。
3,希望对LZ所有帮助
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询