你好,我是悦创。

题目

  1. 简单指针基础
  • 编写一个程序,定义两个整型变量,使用指针交换这两个变量的值。
  1. 字符串翻转
  • 使用指针,编写一个函数来翻转一个给定的字符串。
  1. 数组中的最大值
  • 编写一个函数,找到一个整数数组的最大值并返回其地址。
  1. 动态数组
  • 使用malloc()free(),创建一个动态整型数组,然后再释放其内存。
  1. 指针数组
  • 定义一个字符串数组,然后使用指针数组按字母顺序排序这些字符串。
  1. 函数指针
  • 定义一个函数指针数组,用于存储数学运算(如加、减、乘、除)的函数,然后通过这些指针调用相应的函数。
  1. 复制链表
  • 定义一个简单的单链表结构。编写一个函数来复制这个链表。
  1. 双指针问题
  • 给定一个已排序的整数数组和一个目标值,使用双指针技术找到数组中两个数,使得它们的和等于目标值。
  1. 递归和指针
  • 定义一个二叉树结构。编写一个递归函数,使用指针找到树中的最大值。
  1. 复杂数据结构
  • 定义一个图的结构,其中每个节点都有一个邻居列表。使用指针编写深度优先搜索(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;
}