我编写了一个程序,其中一个函数将两个指针作为参数,并且该函数更改了指针的地址,因此当我在主函数中调用指针的值时,它显示的是相同的旧值。
代码:-
#include <stdio.h>
void sample(int *d, int *m);
int main(){
int day=12,month=3;
int *d,*m;
d = &day;
m = &month;
printf("Day = %d \t MOnth = %d\n",*d,*m);
sample(d,m);
printf("Day = %d \t Month = %d\n",*d,*m);
}
void sample(int *d, int *m){
int month = 1;
int day = 30;
m = &month;
d = &day;
}
根据 stackoverflow 上同一问题的答案,我什至使用 sample(&d,&m)
调用了这些函数,但这也不起作用。
我什至尝试定义如下函数:-
void sample(int *d,int *m){
int month = 1;
int day = 30;
*m = month;
*d = day;
}
但是程序崩溃了。
最佳答案
当您想要将任何变量传递给函数,在该函数中更改它并返回其新值时,您需要传递对其的引用(passing-by-reference) ,而不是变量本身(passing-by-value)。
特别是在您的情况下,如果您想更改 d
和 m
的地址,您需要传递对您想要的地址的引用改变。这意味着您的函数应该像这样修改:
void sample(int *d,int *m){
*m = 1;
*d = 30;
}
并相应地修改 main
函数的主体,如下所示:
int day=12, month=3;
sample(&day, &month);
<小时/>
但是,如果您坚持自己的方式,则应进行以下修改:
void sample(int **d, int **m){
int month = 1;
int day = 30;
*m = &month;
*d = &day;
}
因此您应该像这样更改函数的调用:
int day=12, month=3;
int *d, *m;
d = &day;
m = &month;
sample(d,m);
关于c - 将指针传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37065842/