c语言指针数组经典题目详解
指针数组是一个数组,其元素都是指针。C语言中,指针数组经常用于存储一组字符串或一组指向不同类型对象的指针。
下面是一些经典的题目,对指针数组进行详细解析。
题目1:将一个字符串数组按字典排序。
解析:首先,我们声明一个指向字符串的指针数组,将字符串数组的每个元素赋值给指针数组的对应元素。然后使用冒泡排序法对指针数组进行排序,最后按照排序后的顺序打印指针数组元素所指向的字符串。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
#define MAX_NUM 10
void bubbleSort(char* arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - 1 - i; j++) {
            if (strcmp(arr[j], arr[j+1]) > 0) {
                char* temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
int main() {
    char* strings[MAX_NUM] = {"dog", "cat", "apple", "banana", "elephant", "fish", "goat", "zebra", "horse", "tiger"};
    int size = sizeof(strings) / sizeof(strings[0]);
    bubbleSort(strings, size);
    for (int i = 0; i < size; i++) {
        printf("%s\n", strings[i]);
    }
    return 0;
}
sizeof 指针
```
题目2:将一个整数数组按升序排序。
解析:这道题类似于题目1,只不过其中的元素类型是int而不是char*。
```c
#include <stdio.h>
#define MAX_NUM 10
void bubbleSort(int* arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
int main() {
    int nums[MAX_NUM] = {9, 2, 8, 4, 5, 1, 7, 3, 6, 0};
    int size = sizeof(nums) / sizeof(nums[0]);
    bubbleSort(nums, size);
    for (int i = 0; i < size; i++) {
        printf("%d\n", nums[i]);
    }
    return 0;
}
```
题目3:将一个数组中的奇数放在前面,偶数放在后面。
解析:首先,我们可以创建两个指针数组,分别用于存储奇数和偶数。然后遍历原始数组,将奇数存储到奇数指针数组中,将偶数存储到偶数指针数组中。最后将奇数指针数组和偶数指针数组合并成一个新的数组。
```c
#include <stdio.h>
#define MAX_NUM 10
void splitArray(int* arr, int size, int** oddArr, int* oddSize, int** evenArr, int* evenSize) {
    int oddCount = 0;
    int evenCount = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 0) {
            evenCount++;
        } else {
            oddCount++;
        }
    }
    *oddArr = (int*)malloc(oddCount * sizeof(int));
    *evenArr = (int*)malloc(evenCount * sizeof(int));
    int oddIndex = 0;
    int evenIndex = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 0) {
            (*evenArr)[evenIndex] = arr[i];
            evenIndex++;
        } else {
            (*oddArr)[oddIndex] = arr[i];
            oddIndex++;
        }
    }
    *oddSize = oddCount;
    *evenSize = evenCount;
}
int* mergeArray(int* oddArr, int oddSize, int* evenArr, int evenSize) {
    int* mergedArr = (int*)malloc((oddSize + evenSize) * sizeof(int));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。