给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
for(int i=0;i<numSize;++i){
for(int j=i+1;j<numsSize;++j){
if(nums[i]+nums[j]==target) {
int*ret= malloc(sizeof(int)*2);
ret[0]=i,ret[1]=j;
*returnSize=2; //改变数组的长度
return ret;
}
}
}
*returnSize=0;
return NULL;
}
知识点总结:
数组的长度(即数组的大小)是在编译时确定的,并且在程序运行期间不能改变。这是因为数组是在栈上分配内存的,栈上的内存大小是固定的,不能动态地扩展或缩小。如果需要一个可以动态改变大小的数组,可以使用动态内存分配函数(如malloc、calloc或realloc)来创建一个动态数组。动态数组是在堆上分配内存的,堆上的内存大小可以根据需要动态地扩展或缩小。
所以在使用动态内存分配函数时,必须确保正确地释放分配的内存,否则可能会导致内存泄漏。题目通过指针改变函数外的数组的长度(变量)。