为什么静态使用相当正常的声明?

时间:2017-08-02 14:03:17

标签: c

只是一个疑问。 什么是静态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;
        }

2 个答案:

答案 0 :(得分:3)

static存储类说明符,其主要作用是指定对象的存储持续时间静态存储持续时间表示该变量在程序的整个执行时间内存在。

相反,如果没有 static ,函数范围中的变量(通常:不在文件范围内)默认为自动存储持续时间,这意味着它只能存在只要执行在其范围内,一旦从函数返回它就不再存在。如果它不是static,你永远不会返回指向这个数组的指针 - 变量将会消失(因此返回的指针将无效)!

请记住,此代码在每次调用时都会更改相同的变量,因此它不是线程安全的(两个线程可能会尝试同时更改此相同的变量)。

答案 1 :(得分:1)

使用static关键字更改变量的存储类,从本地(自动) - 这意味着变量在范围结束时被销毁,变为静态 - 这意味着变量生命周期从程序的开始,并在它“死亡”时结束。

由于局部变量在范围结束时被销毁,因此从函数返回局部数组将导致未定义行为,但static确保变量将比其范围更长,归还它是安全的。

使用static时需要注意的另外两件事:

  1. result即使在不同的调用中也是相同的变量,与局部变量不同
  2. result(整个数组)初始化为0