【问题标题】:How do I manipulate an Int in main by passing its address down through two functions in C?如何通过 C 中的两个函数向下传递 Int 的地址来在 main 中操作 Int?
【发布时间】:2012-12-17 21:44:08
【问题描述】:

我在 main 中有一个名为 'end' 的 int。

Main 调用一个函数,该函数本身调用一个函数。

到目前为止,我可以让第一个函数通过向它发送一个地址并让它期望一个指针来操纵“结束”。但是,我无法将其发送到下一个函数,并让它操纵 main 中调用的“int”。

到目前为止,我有以下适用于一个功能;

适用于一种功能的缩写代码:

void function(int* end);

int main(void)
{
   end = 0;

   function(&end);
}

void function(int* end)
{
   *end = 1;

   // At this stage I want to call in another function, and have it be able to manipulate 'end'
}

【问题讨论】:

  • 您可以对非常简单的程序执行此操作,但与 FORTRAN 不同,C 和 C++ 默认为按值传递是有原因的。否则,您可能会遇到 8 个不同的函数接触变量的情况。

标签: c function pointers memory-address


【解决方案1】:

继续传递指针。

void function2( int *end ) {
    *end += 41;
}

void function( int *end ) {
    *end = 1;
    function2( end );
}

【讨论】:

  • 为什么不直接将 int 作为返回值传递呢?看起来简单一些。
  • 很遗憾目前正在使用退货
  • 谢谢帕迪,我会试试的
  • @EdHeal 当然,但这并不总是合适的,并且 OP 专门询问将现有指针传递给另一个函数。
  • @paddy - 我把它作为评论留下了。有些人似乎想让事情变得更复杂。
【解决方案2】:

请记住,在您的函数中您已经有一个整数指针 - 确保您继续传递指针 end 而不是指针 &end 的地址:

#include <stdio.h>

void function( int *end );
void another_function( int *end );

int main( int argc, char *argv[] ) {
   int end = 0;
   function( &end );
   printf( "end: %d\n", end );
}

void function( int *end ) {
   *end = 1;
   another_function( end );
}

void another_function( int *end ) {
   (*end)++;
}

输出: end: 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多