只是一个疑问。 什么是静态vs最终? 这是数组中两个元素之和的代码等于target。
int *twoSum(int numbers[], int n, int target)
{
int temp = 0;
int i = 0,j;
//here i cant understand ,why the static is used rather normal declaration.
static int result[2];
for(i = 0; i < n; i++)
{
for(j = i+1; j < n; j++)
{
if(numbers[i]+numbers[j] == target)
{
result[0] = i ;
result[1] = j ;
break;
}
}
}
return result;
}
答案 0 :(得分:3)
static
是存储类说明符,其主要作用是指定对象的存储持续时间。 静态存储持续时间表示该变量在程序的整个执行时间内存在。
相反,如果没有 static ,函数范围中的变量(通常:不在文件范围内)默认为自动存储持续时间,这意味着它只能存在只要执行在其范围内,一旦从函数返回它就不再存在。如果它不是static
,你永远不会返回指向这个数组的指针 - 变量将会消失(因此返回的指针将无效)!
请记住,此代码在每次调用时都会更改相同的变量,因此它不是线程安全的(两个线程可能会尝试同时更改此相同的变量)。
答案 1 :(得分:1)
使用static
关键字更改变量的存储类,从本地(自动) - 这意味着变量在范围结束时被销毁,变为静态 - 这意味着变量生命周期从程序的开始,并在它“死亡”时结束。
由于局部变量在范围结束时被销毁,因此从函数返回局部数组将导致未定义行为,但static
确保变量将比其范围更长,归还它是安全的。
使用static
时需要注意的另外两件事:
result
即使在不同的调用中也是相同的变量,与局部变量不同result
(整个数组)初始化为0