如果在外部函数中定义了变量,可以在内部函数中使用它吗?或者我应该修改内部循环以获取第三个参数,即数组?
我要问的代码示例?
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?
}
答案 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中不能有任何内部函数。只有我们可以在大括号内定义内部块。