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

C语言数组逆序打印代码运行报编译警告,请求排查修复

C语言逆序打印数组代码的错误排查与修复

原代码

#include <stdio.h>

void rev_array(int array[],  int n);

int main(){

    int n;
    printf("Enter the number of elements in the array:");
    scanf("%d", &n);
    int array[n];

    for(int i=0; i<n; i++){
        printf("Enter the element %d:", i+1);
        scanf("%d", &array[i]);
    }

    rev_array(array[n], n);
    return 0;
}

void rev_array(int array[],  int n){
    for(int i=(n-1); i>-1; i--){
        printf("%d", array[i]);
    }
}

编译警告信息

Test_Code.c: In function 'main':
Test_Code.c:17:15: warning: passing argument 1 of 'rev_array' makes pointer from integer without a cast [-Wint-conversion]
rev_array(array[n], n);
^~~~~
Test_Code.c:3:6: note: expected 'int *' but argument is of type 'int'
void rev_array(int array[], int n);
^~~~~~~~~

错误原因分析

  • 调用rev_array函数时,第一个参数传了array[n],这是数组的第n+1个元素(数组索引从0开始,合法索引范围是0到n-1),属于int类型的值。
  • 但rev_array函数的第一个参数要求的是int *类型(C语言中int array[]等价于int *array),也就是数组的指针/数组名,这里类型不匹配导致警告,同时会导致函数内部访问错误的内存地址,程序行为异常。

修复后的代码

#include <stdio.h>

void rev_array(int array[], int n);

int main(){

    int n;
    printf("Enter the number of elements in the array:");
    scanf("%d", &n);
    int array[n];

    for(int i=0; i<n; i++){
        printf("Enter the element %d:", i+1);
        scanf("%d", &array[i]);
    }

    // 修复:传递数组名array,而非array[n]
    rev_array(array, n);
    return 0;
}

void rev_array(int array[], int n){
    printf("Reversed array: ");
    for(int i=(n-1); i>=0; i--){
        // 每个元素后加空格,提升可读性
        printf("%d ", array[i]);
    }
    printf("\n");
}

额外优化说明

  • 修复了参数传递错误,将array[n]改为array,正确传递数组指针。
  • 在逆序打印时添加了提示文本和元素间的空格,让输出更易读。
  • 将循环条件i>-1改为i>=0,语义更清晰,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:32:36