c - 将指针传递给 C 中的函数

标签 c pointers

我编写了一个程序,其中一个函数将两个指针作为参数,并且该函数更改了指针的地址,因此当我在主函数中调用指针的值时,它显示的是相同的旧值。

代码:-

#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;
 }

但是程序崩溃了。

最佳答案

当您想要将任何变量传递给函数,在该函数中更改它并返回其值时,您需要传递对其的引用() ,而不是变量本身()。

特别是在您的情况下,如果您想更改 dm 的地址,您需要传递对您想要的地址的引用改变。这意味着您的函数应该像这样修改:

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/

相关文章:

c - 使用 printf 格式化列

c - 检测链表中的多个循环

C 从 uint32_t* 转换为 void *

c++ - C++ 中 this* 的类型

java - Java 中类似指针的行为

c - 数组现在感觉像是一个混合体?这里究竟发生了什么

我可以在 Linux 驱动程序中使用 C11 的 <stdatomic.h> 吗?还是必须使用内存屏障的 Linux 函数?

C语言中的乔列斯基因式分解?

c - 微软 x64 编译器中的 sizeof unsigned int

c++ - 如何在不重建数组的情况下将 vector<vector<int>> 转换为 int**?