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

C语言中如何通过双指针访问数组元素?RPN计算器参数访问求助

解决C语言中双指针访问数组元素的问题

首先,我注意到你当前的函数参数和调用可能存在类型不匹配的问题,这也是你无法正确获取数组长度、遍历元素的核心原因。咱们一步步拆解:

先搞清楚你的参数到底是什么

你定义的函数参数是const char** input,这是一个指向字符指针的指针,通常用来传递字符串数组(比如多个独立的字符串组成的数组),而不是单个字符数组(单个字符串)。如果你传入的input1是单个字符数组(比如char input1[] = "123+4*"),那直接传递给const char**类型的参数会导致类型不兼容,*input的取值会出现错误,自然strlen(*input)也得不到正确结果。


分两种情况解决你的问题

情况1:你想传递单个字符数组(字符串)给函数

这时候应该把函数参数改成const char* input(单个字符指针,对应单个字符串),然后用双指针遍历就很简单了:

#include <stdio.h>
#include <string.h>

int RPN_calculator(const char* input) {
    // 获取字符串长度(注意用size_t类型更安全,strlen返回size_t)
    size_t str_len = strlen(input);
    printf("LENGTH OF INPUT: %zu\n", str_len);

    // 双指针遍历字符串的方式:一个指向开头,一个指向末尾的下一个位置
    const char* start_ptr = input;
    const char* end_ptr = input + str_len;

    // 从前往后遍历每个字符
    while (start_ptr < end_ptr) {
        printf("当前字符:%c\n", *start_ptr);
        // 指针后移,访问下一个元素
        start_ptr++;
    }

    // 如果你需要从两头往中间遍历(比如逆序或者查找),可以这样:
    // start_ptr = input;
    // end_ptr = input + str_len - 1;
    // while (start_ptr <= end_ptr) {
    //     printf("头:%c,尾:%c\n", *start_ptr, *end_ptr);
    //     start_ptr++;
    //     end_ptr--;
    // }

    return 0;
}

// 调用示例
int main() {
    char input1[] = "3 4 + 2 *";
    RPN_calculator(input1);
    return 0;
}

这里的双指针思路是:用start_ptr标记当前访问的位置,end_ptr作为遍历的边界,通过移动指针来逐个访问数组元素,完全不需要使用下标。


情况2:你确实需要传递字符串数组(多个RPN表达式)

如果input1是多个字符串组成的数组(比如const char* input1[] = {"1 2 +", "3 4 * 5 -"}),那你的const char** input参数是对的,但要注意:无法通过指针直接获取字符串数组的长度,必须额外传递一个参数来告知数组元素的个数。示例代码如下:

#include <stdio.h>
#include <string.h>

int RPN_calculator(const char** input, size_t array_len) {
    // 遍历字符串数组中的每个字符串
    for (size_t i = 0; i < array_len; i++) {
        const char* current_str = input[i];
        size_t str_len = strlen(current_str);
        printf("第%zu个表达式,长度:%zu\n", i+1, str_len);

        // 用双指针遍历当前字符串的每个字符
        const char* start_ptr = current_str;
        const char* end_ptr = current_str + str_len;
        while (start_ptr < end_ptr) {
            printf("  字符:%c\n", *start_ptr);
            start_ptr++;
        }
    }
    return 0;
}

// 调用示例
int main() {
    const char* input1[] = {"3 4 +", "5 2 * 7 -"};
    // 计算字符串数组的元素个数
    size_t input_len = sizeof(input1) / sizeof(input1[0]);
    RPN_calculator(input1, input_len);
    return 0;
}

总结一下你之前的问题

你之前的代码里用strlen(*input),如果传入的是单个字符数组,*input的实际取值是错误的(因为类型不匹配),所以得到的长度不对,遍历自然也失败。先明确你要传递的是单个字符串还是字符串数组,调整参数后,双指针遍历的逻辑就清晰了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:25