You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将变量地址传递给函数后,函数内修改的值在主函数不生效?

问题分析与解决

你的代码问题出在指针参数的使用方式错误,以及局部变量的生命周期问题:

核心错误点

  1. 修改了指针形参本身,而非指向的内存
    函数waiter中的result_count是形参,它是main函数传入的&result_count的一个副本。你执行result_count = &t;只是改变了这个副本指针的指向,完全没有修改main函数中result_count变量的内存值。函数内打印的是局部变量t的值,但main里的变量根本没被改动。
  2. 局部变量t的生命周期问题
    就算你想让main里的指针指向t,t是函数内的局部变量,函数执行结束后会被销毁,此时指向它的指针会变成野指针,访问会触发未定义行为。

正确的修改方式

要修改main函数中result_count的值,应该通过解引用指针,直接往它指向的内存地址写入值:

#include<stdio.h>

// 先声明函数,避免隐式声明问题
int* waiter(int number_count, int* number, int q, int* result_count);

int main()
{
  int result_count;
  // 需确保n、number、q已提前定义
  int* result = waiter(n, number, q, &result_count);
  printf("%d", result_count);  // 现在会打印10
}

int* waiter(int number_count, int* number, int q, int* result_count) 
{
  int t = 10;
  // 解引用指针,修改main中变量的实际值
  *result_count = t;
  printf("%d", *result_count); // 打印10
  // 返回合法指针,避免编译警告,示例返回NULL
  return NULL;
}

额外说明

  • 函数必须在调用前声明或定义,否则C编译器会默认它返回int类型,和你实际返回的int*类型不匹配,会产生编译错误。
  • 若需返回动态数组或指针,需用malloc等函数分配堆内存,避免返回局部变量的指针(野指针问题)。

内容的提问来源于stack exchange,提问作者sam907

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:52:27