方法一程序
int MaxSubSequence(int *num, int length)
{
if(!num || length <=0)
{
ValidInput = false;
return 0;
}
int start = 0, end = 0;
int biggest = num[0];
int currentSum = num[0];
for(int i = 1; i < length; ++i)
{
currentSum += num[i];
if(currentSum < num[i])
{//更换起点,因为前面的和加到当前一个数,比当前的数还要小,说明前面的子数组不需要
start = i;
end = i;
currentSum = num[i];
}
else if(currentSum >= biggest)
{//如果加上当前数后的和比最大和要大,则将当前元素包括进子数组中
end = i;
biggest = currentSum;
}
}
ValidInput = true;
return biggest;
}
bool ValidInput = true;
int main()
{
int num[] = {1,-2,3,10,-4,7,2,-5};
int result = MaxSubSequence(num, 8);
cout << result << endl;
system("pause");
return 0;
}
——》对于方法一,bool ValidInput = true;要放在main函数外部(也是任何函数的外部),作为一个全局变量,这样在MaxSubSequence函数中才可以使用标识符ValidInput;
——》如果我们尝试把bool ValidInput = true;放在了main内部,编译不通过,在MaxSubSequence函数使用ValidInput处会报“编译错误”
为了解决这个编译错误,我们在MaxSubSequence函数内部写上extern bool ValidInput,这样编译错误解决,但是还是无法成功生成可执行文件,原因是又会出现链接错误,原因是因为无法找到这个具有外部连接的标识符的定义(虽然在main中有定义,但却是局部变量)
——》这个例子可以作为http://blog.youkuaiyun.com/tong_xin2010/article/details/39778137 的材料来思考static和extern以及外部和内部连接