You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用bubbleSort函数时如何正确传入char *[]类型的第一个参数

错误原因

你定义的bubbleSort第一个形参char *names[]本质是char **类型,设计目标是接收字符串指针数组(即每个数组元素都是指向独立字符串的指针);但你main函数中定义的names是char[8]类型的单字符数组,每个元素是char类型,传参时会自动退化为char*指针,和形参要求的char**完全不匹配,因此触发类型转换报错。

解决方案

根据你的实际需求选以下任意一种修改方案即可:

方案1:需求为排序单个字符数组(匹配你当前main函数的测试用例)

修改bubbleSort的形参定义和内部交换逻辑即可,修改后完整代码如下:

#include <iostream>
#include <string.h>
using namespace std;

enum Bool { TRUE, FALSE };

// 修改第一个形参为char数组类型
void bubbleSort(char names[], const int size)
{
    Bool swapped;
    // 交换的变量类型改为char,和数组元素类型匹配
    char temp;

    for (int i = 0; i < size; ++i)
    {
        swapped = FALSE;
        for (int j = 0; j < size - i - 1; ++j)
        {
            if (names[j] > names[j + 1])
            {
                temp = names[j];
                names[j] = names[j + 1];
                names[j + 1] = temp;
                swapped = TRUE;
            }
        }
        if (swapped == FALSE)
        {
            break;
        }
    }
}

int main()
{
    char names[] = {'s', 'a', 'c', 'd', 'i', 'd', 'm', 'o'};
    int size = 8;
    bubbleSort(names, size);
    for (int i = 0; i < size; ++i)
        cout << names[i] << " " << endl;
    return 0;
}

方案2:需求为排序多个字符串(匹配你最初设计的bubbleSort函数签名)

修改main函数中的测试用例为字符串指针数组,同时修正bubbleSort内部的字符串比较逻辑(直接比较指针是比地址,不是比字符串字典序,需要用strcmp函数):

#include <iostream>
#include <string.h>
using namespace std;

enum Bool { TRUE, FALSE };

void bubbleSort(char *names[], const int size)
{
    Bool swapped;
    char* temp;

    for (int i = 0; i < size; ++i)
    {
        swapped = FALSE;
        for (int j = 0; j < size - i - 1; ++j)
        {
            // 用strcmp比较字符串字典序,返回大于0表示前一个字符串更大
            if (strcmp(names[j], names[j + 1]) > 0)
            {
                temp = names[j];
                names[j] = names[j + 1];
                names[j + 1] = temp;
                swapped = TRUE;
            }
        }
        if (swapped == FALSE)
        {
            break;
        }
    }
}

int main()
{
    // 定义字符串指针数组,每个元素为char*类型,和形参类型匹配
    char* names[] = {"susan", "alice", "bob", "david", "lily", "mike", "john", "tom"};
    int size = 8;
    bubbleSort(names, size);
    for (int i = 0; i < size; ++i)
        cout << names[i] << " " << endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者yurachika2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:30:00