题目
给定一个整数数组 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 ; //返回全局变量地址,方便程序调用
}