Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过C中的两个函数向下传递Int的地址来操作main中的Int?_C_Function_Pointers_Memory Address - Fatal编程技术网

如何通过C中的两个函数向下传递Int的地址来操作main中的Int?

如何通过C中的两个函数向下传递Int的地址来操作main中的Int?,c,function,pointers,memory-address,C,Function,Pointers,Memory Address,我在main中有一个int,叫做'end' 函数中的Main调用,它本身在函数中调用 到目前为止,我能够让第一个函数通过发送一个地址并让它期望一个指针来操纵“end”。但是,我不能将其发送到下一个函数,并让它处理main中调用的“int” 到目前为止,我有以下一个功能的作品 用于一个功能的缩写代码: void function(int* end); int main(void) { end = 0; function(&end); } void function(int

我在main中有一个int,叫做'end'

函数中的Main调用,它本身在函数中调用

到目前为止,我能够让第一个函数通过发送一个地址并让它期望一个指针来操纵“end”。但是,我不能将其发送到下一个函数,并让它处理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'
}

继续传球

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

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

继续传球

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

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

请记住,在您的函数中已经有一个整数指针-请确保继续传递指针
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)++;
}
#包括
无效函数(int*end);
使另一个_函数无效(int*end);
int main(int argc,char*argv[]){
int end=0;
函数(&end);
printf(“结束:%d\n”,结束);
}
无效函数(int*end){
*结束=1;
另一个_函数(结束);
}
作废另一个_函数(int*end){
(*结束)+;
}
产出:
end: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)++;
}
#包括
无效函数(int*end);
使另一个_函数无效(int*end);
int main(int argc,char*argv[]){
int end=0;
函数(&end);
printf(“结束:%d\n”,结束);
}
无效函数(int*end){
*结束=1;
另一个_函数(结束);
}
作废另一个_函数(int*end){
(*结束)+;
}
产出:
end:2

为什么不将int作为返回值向下传递呢?似乎有点简单。不幸的是,现在正在使用退货。谢谢帕迪,我会试试的that@EdHeal当然可以,但这并不总是合适的,OP特别要求将现有指针传递到另一个函数中。@paddy-我把它作为注释留下了。有些人似乎想让事情变得更复杂,为什么不把int作为返回值传递下去呢?似乎有点简单。不幸的是,现在正在使用退货。谢谢帕迪,我会试试的that@EdHeal当然可以,但这并不总是合适的,OP特别要求将现有指针传递到另一个函数中。@paddy-我把它作为注释留下了。有些人似乎想让事情变得更复杂。你可以为非常简单的程序做这件事,但有一个原因,C和C++默认通过值,不像FORTRAN。否则,你可以在8个不同的函数接触变量的情况下完成。你可以为非常简单的程序做这件事,但是有一个原因,C和C++默认值是通过的,不像FORTRAN。否则,您可能会遇到8个不同函数接触变量的情况。