int main() {
int nums[] = { 2, 7, 11, 15 };
int size = sizeof(nums) / sizeof(nums[0]);
int target;
printf("请输入目标值: ");
scanf("%d", &target);
int returnSize;
int* result = twoSum(nums, size, target, &returnSize);
if (returnSize > 0)
printf("结果索引: [%d, %d]\n", result[0], result[1]);
else
printf("没有找到");
return 0;
}
以上代码则是main函数里的我们来分析一下
int nums[] = { 2, 7, 11, 15 };
int size = sizeof(nums) / sizeof(nums[0]);
int target;
printf("请输入目标值: ");
scanf("%d", &target);
以上我相信大家都能看得懂就不用解释了
int returnSize;
int* result = twoSum(nums, size, target, &returnSize);
if (returnSize > 0)
printf("结果索引: [%d, %d]\n", result[0], result[1]);
else
printf("没有找到");
在这第一行中的变量returnSize,我当时不明白为何要这样写有什么意义呢?不知道大家有没有和我一样的困惑下面我们就来解析
在指针函数中我们需要传入数组,数组的大小 输入的值 还有一个不知道干啥的returnSize
指针函数和函数指针的区别
指针函数:说白了就是返回的是指针则就是指针函数如:
int* getArray() {
static int arr[3] = {1, 2, 3};
return arr;
}
int main() {
int* p = getArray();
for (int i = 0; i < 3; i++) {
printf("%d ", p[i]);
}
return 0;
}
这里返回的便是int*;
函数指针:说白了就是返回的是函数则就是函数指针如
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*operation)(int, int); // 定义一个函数指针
operation = add; // 指向 add 函数
printf("Add: %d\n", operation(5, 3)); // 调用 add 函数
operation = subtract; // 指向 subtract 函数
printf("Subtract: %d\n", operation(5, 3)); // 调用 subtract 函数
return 0;
}
这里返回的则是函数;
接上文
好我们继续看returnSize
if (returnSize > 0)
printf("结果索引: [%d, %d]\n", result[0], result[1]);
else
printf("没有找到");
returnSize说白了就是让用户更好的体验,由于我当时想的太多没有看main函数一直盯着result函数里面看导致我一直很困惑不明白写这的意义何在
我们来分析result函数里面的内容
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
static int result[2]; // 使用静态数组返回结果
for (int i = 0; i < numsSize; i++) {
for (int j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
*returnSize = 2;
return result;
}
}
}
*returnSize = 0; // 如果没有找到符合条件的结果,返回空数组
return NULL;
}
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
这一句int *nums则是为了拿到数组里面的元素由于数组是地址则取一个星花则是那到里面的值,int numsSize 是传如数组的值的个数, int target则是用户输入的值 int * returnSize 这里取星花是为了改里面的值 用于main函数里的if判断的
static int result[2];
这里为什么要用static来修饰这个数组呢那是因为在函数中如返回的是们没有修饰的数组则会随着函数的释放而释放但加个修饰则会保留;
for (int i = 0; i < numsSize; i++) {
for (int j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
*returnSize = 2;
return result;
}
}
}
*returnSize = 0; // 如果没有找到符合条件的结果,返回空数组
return NULL;
以上代码我相信你们都能看懂,有一点则是*returnSize = 2为什么=2而不是等于其他的呢,当然可以等于其他的但是没有意义由于数组里就两个等于其他的没什么意义用户体验不好.
结尾
以上便是我对这程序的理解