LeetCode1. 两数之和&C语言中实现函数返回字符串

题目

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

代码:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 * 个人思路:以数组第一个元素作为开始记为A,一次与第二个、第三个……第numsSize个元素相加,判断和是
 * 否等于target;若相等则返回此时相加两元素的下标,若不相等则以第二个元素标记为A,开始继续相加比 
 * 较;直至最后一个元素为止,失败返回null。
 */
int* twoSum(int* nums, int numsSize, int target) 
{
    int* twoSum(int* nums, int numsSize, int target) {
    int A, B;   // A为第一个和数的下标,B为第二个和数的下标
    int i;
    static int p[2]={0};

    A = 0;// A初始化为第一个元素
    
    // 下面是比较程序
    for(; A<numsSize; A++)
    {
	for(i=A+1; A<numsSize&&i<numsSize; i++)
	{
	    if(nums[A]+nums[i] == target)
	    {
	        B = i;
		p[0] = A;
		p[1] = B;	
		return p;
	    }
	}
    }
    return 0;
}

采用的是暴力解法,但是对于函数返回一段字符有疑惑,所以开始查阅资料。

在twoSum函数中我们找到的下标记为A,B,变量A和B都是局部变量,函数执行完毕返回后这段内存就废了A和B的值也就不复存在

C语言中实现函数返回字符串

首先要确定函数返回的字符串地址的来源,一般分为四种方式:

1.函数形参带进来的地址

void  func1( char *s )  //通过形参返回字符串

{

    strcpy( s, "hello");

}

char * func1_1( char *s ) //另一种写法

{

    strcpy( s, "hello");

    return s ; //返回形参地址,方便程序调用

}

2.静态局部变量地址

char * func2( void ) 

{

    static char s[100]; //不能是非静态变量,否则,子函数结束,局部变量被释放,调用者得到一个无效的地址值。

    strcpy( s, "hello");

    return s ; //返回静态局部变量地址,由调用者采用相应的指针变量接收返回值,得到字符串数据。

}

3.局部变量地址,必须在函数中用malloc()函数进行地址分配

char * func3( void )

{

    char *s ;

    s=(char *)malloc( 100 );

    strcpy( s, "hello");

    return s ; //返回s值,该地址需要调用者去free()释放。

}

4.采用全局变量地址

//定义全局变量

char globle_buf[100];

void func4( void )

{

    strcpy( globle_buf, "hello");

}

char * func4_1( char *s ) //另一种写法

{

    strcpy( globle_buf, "hello");

    return globle_buf ; //返回全局变量地址,方便程序调用

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值