你好,我是悦创。
题目
- 简单指针基础
- 编写一个程序,定义两个整型变量,使用指针交换这两个变量的值。
- 字符串翻转
- 使用指针,编写一个函数来翻转一个给定的字符串。
- 数组中的最大值
- 编写一个函数,找到一个整数数组的最大值并返回其地址。
- 动态数组
- 使用
malloc()
和free()
,创建一个动态整型数组,然后再释放其内存。
- 指针数组
- 定义一个字符串数组,然后使用指针数组按字母顺序排序这些字符串。
- 函数指针
- 定义一个函数指针数组,用于存储数学运算(如加、减、乘、除)的函数,然后通过这些指针调用相应的函数。
- 复制链表
- 定义一个简单的单链表结构。编写一个函数来复制这个链表。
- 双指针问题
- 给定一个已排序的整数数组和一个目标值,使用双指针技术找到数组中两个数,使得它们的和等于目标值。
- 递归和指针
- 定义一个二叉树结构。编写一个递归函数,使用指针找到树中的最大值。
- 复杂数据结构
- 定义一个图的结构,其中每个节点都有一个邻居列表。使用指针编写深度优先搜索(DFS)和广度优先搜索(BFS)的实现。
每个问题都有自己的挑战和考察点。这些问题将帮助你或任何其他学习者更好地理解和掌握C语言中的指针概念和应用。
答案
1. 简单指针基础
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y); // 输出 "x = 10, y = 5"
return 0;
}
2. 字符串翻转
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char s[] = "hello";
reverse(s);
printf("%s\n", s); // 输出 "olleh"
return 0;
}
3. 数组中的最大值
#include <stdio.h>
int *findMax(int arr[], int n) {
int *maxPtr = &arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > *maxPtr) {
maxPtr = &arr[i];
}
}
return maxPtr;
}
int main() {
int arr[] = {10, 20, 5, 40, 50};
int *maxValuePtr = findMax(arr, 5);
printf("Max Value: %d\n", *maxValuePtr); // 输出 "50"
return 0;
}
4. 动态数组
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 5;
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed.");
return 1;
}
for (int i = 0; i < n; i++) {
arr[i] = i + 1; // 初始化数组
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 输出 "1 2 3 4 5 "
}
free(arr);
return 0;
}
5. 指针数组
#include <stdio.h>
#include <string.h>
#define SIZE 5
void sortStrings(char *arr[], int n) {
char *temp;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (strcmp(arr[i], arr[j]) > 0) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int main() {
char *arr[SIZE] = {"banana", "apple", "cherry", "date", "fig"};
sortStrings(arr, SIZE);
for (int i = 0; i < SIZE; i++) {
printf("%s ", arr[i]); // 输出 "apple banana cherry date fig "
}
return 0;
}