1.给定目标值target,和数组元素,从数组元素找出两个元素的和为target,并且返回这两个元素的下标
注意:
1.在求数组长度时不可以直接在函数中使用int length=sizeof(num)/sizeof(int);
应该,先把长度求出来再作为参数传给函数
2.在函数中数组作为返回值时数组是局部,该函数被调用后数组就会清空,所以里面的值不会被保留
问题解决:
方式1:在数组前面加上static确保函数被调用完成,数组不会被清空
方式2:用malloc分配堆空间
代码:
思路:
int* find(int num[],int val,int length)
{
static int result[2]={0};
for(int i=0;i<length;i++)
{
┊ for(int j=i+1;j<length;j++)
┊ {
┊ ┊ int sum =num[i]+num[j];
┊ ┊ if(sum==val)
┊ ┊ {
┊ ┊ ┊ result[0]=num[i];
┊ ┊ ┊ result[1]=num[j];
┊ ┊ ┊ printf("%d %d\n",num[i],num[j]);
┊ ┊ ┊ printf("%d %d\n",i,j);
┊ ┊ ┊ break;
┊ ┊ }
┊ }
}
return result;
}
int main()
{
int num[]={1,2,3,4,5};
int target=6;
int length=sizeof(num)/sizeof(int);
int *p=find(num,target,length);
return 0;
}