原本程序:
#include<stdio.h>
int *twoSum(int *nums,int numsSize,int target)
{
static int returnnums[2]={0,0};
for(int i=0;i<numsSize-1;i++)
{
for(int ii=i+1;ii<numsSize;ii++)
{
if((nums[i]+nums[ii])==target)
{
returnnums[0]=i;
returnnums[1]=ii;
printf("找到了\n");
return returnnums;
}
}
}
return NULL;
}
int main()
{
int nums[10];
int *a;
int n;
printf("输入目标值:\n");
scanf("%d",&n);
printf("输入数组:\n");
for(int i=0;i<10;i++)
{
scanf("%d",&nums[i]);
}
a=twoSum(nums,10,n);
if(a==NULL)
{
printf("未找到\n");
}
else
{
printf("两个数是:%d,%d\n",a[0],a[1]);
}
return 0;
}
遇到过的问题:
1.定义的函数前面有指针是什么含义?表示函数返回一个指针(地址),所以可以用 void *num(…); int *p; p=num(…) 来接收 (网上查的)
函数返回了一个数组(数组名,地址),那就在main函数里写了个int a[2]; 来接收传出来的函数 a=twoSum(nums,10,n) ,但编译报错,网上查说是数组不匹配,后来发现,数组不能通过这种方式赋值。同时指针就是一串地址,传过来的是什么就是什么,于是直接定义了int *a 一个指针,然后a=twoSum(nums,10,n);发现没问题,传过来的是数组,可以直接a[0],a[1]这样使用了,不需要定义个int a[]的数组,多此一举。
2.遇到过程序运行时,输入完数组后,报“段错误”,网上查说是数组问题,忘记怎么解决的了,可能程序哪个地方写错了。
3.运行程序时,发现输入正确的数组,和想要的目标值,也会出现未找到的情况,发现是函数定义的int returnnums[2]={0,0}数组前面要加static,因为程序在结束时,会将之前用到的地址清零。(段错误是不是也是这里产生的?)
4.一开始函数找不到是返回的是0,后面想想,指针赋值为0不行,0也是一个具体的值,有地址的,必须为NULL。
刚刚又试了一下,把static int returnnums[2]={0,0}前面的static去掉,返回值改为0,依然可以成功运行,奇怪。。
补一个知识点:数组必须在创建时,就知道数组的大小(有多少个数据)。
同时
int i;
int a[i];
scanf("%d",&i);
这种方法没有,定义数组必须要有常量。