10 20
30 40
50 60
输出:4 3 2 1
#include <stdio.h>
int main()
{
static int i = 5; // here
if (--i){
printf("%d ", i);
main();
}
}
输出:4 4 4 4 ...(分段故障)
任何想法如何只考虑一次静态int变量并反复使用int?
答案 0 :(得分:0)
在函数内部声明为 let arr3: [Any] = [true, 1.2, "hello", 7]
print(arr3.indexedDictionary)
的变量在每次调用函数时都会保留其值。首次调用函数时,它只初始化一次。因此,当函数调用自身时,[2: "hello", 0: true, 1: 1.2, 3: 7]
的值将保留在先前的调用中。
not knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
的局部变量特定于函数的给定调用,因此每次调用该函数时,都会创建并初始化该变量的新副本。这导致每次static
为5,这反过来导致无限递归,导致堆栈溢出和核心转储。
答案 1 :(得分:0)
当您在函数中声明static
变量时,函数&#34;会记住&#34;变量的最后一个值,即使它终止后也是如此。
void Foo() {
static int x = 5;
}
在上面的示例中,您告诉编译器x
将被记住&#34;&#34;并且初始值为5
。对Foo()
的后续调用不会将x
的值5
重新分配,而是使用之前记住的值。
相反:
void Bar() {
int x = 5;
}
在这里,您告诉编译器每次Bar()
执行时,都会在堆栈上创建一个新变量x
并赋值为5
。