我写了一个C程序。我有两个指针*a
和*b
。现在,我强加*a = 20
和*b = 10
。之后我在子程序中强制a = b
但值似乎没有改变。我希望*a = 10
和*b = 10
。请帮我找到解决方案。谢谢。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Copy(int *a1, int *a2)
{
a1 = a2;
}
void Test()
{
// a = 20
int *a = (int *)malloc(sizeof(int));
*a = 20;
// b = 10
int *b = (int *)malloc(sizeof(int));
*b = 10;
Copy(a, b); // a = b
printf("\na = %d", *a);
printf("\nb = %d", *b);
}
int main(int argc, char *argv[]){
Test();
fflush(stdin);
printf("\nPress any key to continue");
getchar();
return 0;
}
答案 0 :(得分:2)
如果您要分配值,以便在Copy
*a == *b
召唤之后,您必须按如下方式更改您的功能:
void Copy(int *a1, int *a2)
{
*a1 = *a2;
}
如果你想分配指针,那么在调用Copy
a==b
之后,你必须传递一个指向指针的指针:
void Copy(int **a1, int **a2)
{
*a1 = *a2;
}
void Test() {
...
Copy (&a, &b);
...
}
请注意,a==b
也表示*a == *b
。
答案 1 :(得分:1)
函数参数按值传递。因此,在函数Copy
内部,您正在修改指针的副本,而不是Test
函数中的原始指针。因此,当您离开Copy
函数时,外部指针不会被修改。
更改Copy
以接收int **
,这样您就可以更改指针值内部
void Copy(int **a1, int **a2)
{
*a1 = *a2;
}
以这种方式调用函数:
void Test() {
...
Copy (&a, &b);
...
}