leetCode两数之和程序

原本程序:

#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);

这种方法没有,定义数组必须要有常量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值