内部函数可以使用父函数中定义的变量吗?

时间:2016-10-19 15:06:39

标签: c arrays

如果在外部函数中定义了变量,可以在内部函数中使用它吗?或者我应该修改内部循环以获取第三个参数,即数组?

我要问的代码示例?

perm_rec1 ( int nr_value , int N)
{
    int array[];
    secondFunction(int nr_value, int N)
}

内在功能:

secondFunction (int nr_value, int N)
{
    int temp = array; //is This possible? Or third parameter?

}

5 个答案:

答案 0 :(得分:6)

  

如果变量在外部函数中定义,可以在内部函数中使用吗?

C没有嵌套函数,这是“内部”和“外部”指定有意义的唯一意义。当一个函数调用另一个函数时,如在您的示例中,调用是第一个函数“内部”,而不是被调用函数。

在任何情况下,在块范围内声明的变量(例如在您的示例中)仅在声明块的词法范围的剩余部分内可见。它们在该块中调用的函数体中不可见 - 即使它是相同的函数,也不是递归调用的。

  

或者我应该修改内部循环以获取第三个参数,即数组?

最自然的实现是,为函数提供第三个参数,通过该参数向该函数提供数组(指向第一个元素的指针)。

答案 1 :(得分:4)

这里没有内部功能(C中也没有)。你拥有的是一个调用另一个函数的函数;并且你不能在被调用者中访问在调用者中定义的东西,除非你明确地将它作为参数传递。

答案 2 :(得分:2)

从技术上讲,实际上可能会滥用局部变量来访问父函数的堆栈帧,是的。但这是一个非常非常难看的解决方案,取决于平台。所以只需将其作为参数传递。

答案 3 :(得分:2)

解释你需要的东西,你可以使用指针来做到这一点:

#include <stdio.h>

void test ( int *pointer, size_t size)
{
    for (size_t i=0; i<size; i++)
    {
        printf("array[%zu] = %d\n", i, *pointer++);
    }
}

int main(void) {

    int array[] = { 1, 2, 3, 4, 5};

    test(array, sizeof(array)/sizeof(array[0]));

    return 0;
}

答案 4 :(得分:1)

在内部块中声明的任何变量都会影响外部变量声明。

{
int a = 6;
  {
    int a = 9;
    // won't affect the outer declaration
  }
// value of a = 6 here
}

但正如你所要求的那样,C中不能有任何内部函数。只有我们可以在大括号内定义内部块。