为了备战蓝桥杯,今天第一天做LeetCode,就做了一道题花了半个小时,期间有各种错误,深深的感受到自己连菜鸡都算不上。
题目:给定一个数组nums,与目标值target,在该数组中找到和为目标值的两个整数,并返回他们的数组下标(暴力破解)
int* twoSum(int* nums, int numsSize, int target) //最终还是借鉴大神的
{
static int a[2]={0}; //static型占用的内存不会因为函数的返回而释放
for (int i = 0; i < numsSize - 1; i++) //注意循环的值
{
for (int j = i+1; j < numsSize; j++)
{
if (nums[i] + nums[j] == target)
{
a[0] = i;
a[1] = j;
return a;
}
}
}
return 0;
}
遇到的问题
1. 为什么用static
2.为什么要返回 return a
3.为什么要有 return 0
指针函数返回值:
指针函数的使用和一般函数的使用相同,但需注意返回值问题。对于一个返回值为指针的函数,不能返回auto型局部变量的地址,但可返回static型变量的地址。
这是因为auto型变量的生存周期很短,当函数返回时,auto型变量的内存空间将被释放,如果返回值是auto型变量,那么这个返回指针将无效,变成野指针。而static类型变量占用的内存空间则不会因为函数返回而被释放,不会出现野指针问题。
所以编写指针函数使要注意返回值。总体原则是:返回的指针对应的内存空间不会因函数返回则被释放掉。常用的返回指针有以下几种:
(1) 函数中动态分配内存空间(通过malloc等实现)的首地址;
(2) 静态变量(static)或全局变量所对应的变量的首地址;
(3) 通过指针形参所获得的实参的有效地址
---------------------
该段来自:https://blog.csdn.net/wangxufa/article/details/72935091
、