个人自用----c语言指针复习(malloc)
文章目录
- 前言
- 一、题目
- 二、c语言代码
- 总结
前言
一直搞不清指针的用法,特别是跟数组结合在一起,今天找了一个小题目就准备看看指针和数组到底的应用。其实主要是就是形参的传递,今天算是了解了一点点,当时上c语言课程的时候也没弄清楚。今天用到了malloc关键词的用法,对不确定长度的数组进行内存的分配,后续肯定是有作用的,比如内存比较紧张的情况下等等。
后面的结构体、链表也得找的题目熟悉复习一下。
感觉这几个是嵌入式中用的比较多的?其他就是简单的判断和循环了。
一、题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
二、c语言代码
#include <stdio.h>
#include <stdlib.h> // 添加此头文件用于 malloc 和 freeint* fun(int* nums, int numsize, int target, int* returnnum) {int i, j;for (i = 0; i < numsize; i++) {for (j = i + 1; j < numsize; j++) {if (nums[i] + nums[j] == target) {returnnum[0] = i;returnnum[1] = j;return returnnum;}}}return NULL;
}int main() {int numsize; // 数组大小int target; // 目标值int* num = NULL; // 指向动态分配数组的指针// 输入数组大小printf("请输入数组的大小: ");scanf("%d", &numsize);// 动态分配内存给数组num = (int*)malloc(numsize * sizeof(int));if (num == NULL) {printf("内存分配失败!\n");return 1; // 退出程序并返回错误代码}// 输入数组元素printf("请输入 %d 个整数:\n", numsize);for (int i = 0; i < numsize; i++) {scanf("%d", &num[i]);}// 输入目标值printf("请输入目标值: ");scanf("%d", &target);// 计算结果int result[2];int* ret = fun(num, numsize, target, result);// 输出结果if (ret != NULL) {printf("找到解: [%d, %d]\n", ret[0], ret[1]);printf("因为 nums[%d] + nums[%d] = %d + %d = %d\n", ret[0], ret[1], num[ret[0]], num[ret[1]], target);} else {printf("未找到两数之和等于 %d 的解\n", target);}// 释放动态分配的内存free(num);// 程序暂停printf("\n按回车键退出...");getchar(); // 消耗输入缓冲区中的换行符getchar(); // 等待用户按回车return 0;
}
总结
记录一下吧,最近一个月都在培训,没怎么学习,好难受,没有提升,还是挤时间吧。手机上刷题感觉也没啥作用,用电脑也没时间。继续加油吧。