1. 动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据,并找出第一次出现 12.35 的下标位置,并输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{// 动态申请10个float类型元素的内存空间float *a = (float*)malloc(10 * sizeof(float));if (a == NULL) {printf("内存分配失败\n");return 1;}// 已有数组float originalArray[10] = {1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 12.35};// 拷贝数据memcpy(a, originalArray, 10 * sizeof(float));// 查找第一次出现12.35的下标int index = -1;for (int i = 0; i < 10; i++) {if (a[i] == 12.35f) {index = i;break;}}// 输出结果if (index != -1) {printf("第一次出现12.35的下标是: %d\n", index);} else {printf("未找到12.35\n");}// 释放内存free(a);return 0;
}
2. 动态申请一个整型数组,并给每个元素赋值,要求删除第3个元素。
#include <stdio.h>
#include <stdlib.h>int main()
{int n = 5; // 数组初始大小// 动态申请整型数组int *a = (int*)malloc(n * sizeof(int));if (a == NULL) {printf("内存分配失败\n");return 1;}// 给每个元素赋值for (int i = 0; i < n; i++) {a[i] = i;}// 输出原始数组printf("原始数组: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 删除第3个元素,移动元素覆盖要删除的元素for (int i = 2; i < n - 1; i++) {a[i] = a[i + 1];}// 重新分配内存n--;int *temp = (int*)realloc(a, n * sizeof(int));if (temp == NULL) {printf("内存重分配失败\n");free(a);return 1;}a = temp;// 输出删除后的数组printf("删除第3个元素后的数组: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 释放内存free(a);return 0;
}
3. 动态申请一个整型数组,并给每个元素赋值,要求在第4个元素后插入100。
#include <stdio.h>
#include <stdlib.h>int main()
{int n = 5; // 数组初始大小// 动态申请整型数组int *a = (int*)malloc(n * sizeof(int));if (a == NULL) {printf("内存分配失败\n");return 1;}// 给每个元素赋值for (int i = 0; i < n; i++) {a[i] = i;}// 输出原始数组printf("原始数组: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 在第4个元素后插入10086,重新分配内存n++;int *temp = (int*)realloc(a, n * sizeof(int));if (temp == NULL) {printf("内存重分配失败\n");free(a);return 1;}a = temp;// 移动元素,为插入新元素腾出空间for (int i = n - 1; i > 4; i--) {a[i] = a[i - 1];}// 插入新元素a[4] = 100;// 输出插入后的数组printf("插入100后的数组: ");for (int i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");// 释放内存free(a);return 0;
}
4. 编写一个函数,实现 memmove 的功能。
#include <stddef.h>void *my_memmove(void *dest, const void *src, size_t n) {if (dest == NULL || src == NULL || n == 0) {return dest;}unsigned char *d = (unsigned char *)dest;const unsigned char *s = (const unsigned char *)src;if (d < s) {for (size_t i = 0; i < n; i++) {d[i] = s[i];}} else {for (size_t i = n; i > 0; i--) {d[i - 1] = s[i - 1];}}return dest;
}