millerperez 2023-05-25 10:10 采纳率: 92.9%
浏览 23
已结题

插入元素到数组相应位置并输出

img


为什么左边的“查看列表”里面len是2呢?
我以为数组sizeof是11 * 4
首元素sizeof是4
两个相除不是11吗?怎么得到的2。
以及如何正确更改(注:下面两个注释之间的代码是题目固定的,不能对那部分变动)?
谢谢各位了!

#include<stdio.h>
int insert (int a [],int num){
    int i;
    int len = sizeof(a)/sizeof(a[0]);
    if(num > a[len - 2]) {
    a[len - 1] = num;
    return 0;
}
    for(i = 0;i < len - 2;i++){
        if(a[i] > num){
            int j;
            for(j = len - 2;j >= i;j--){
                a[j+1] = a[j];
            }
            a[i] = num;
            break;
        }
    }
    return 0;
}
//StudybarCommentBegin
int main()
{
int a[11]={10,20,30,40,50,60,70,80,90,100};
int number,i;
scanf("%d",&number);
insert(a,number);
for(i=0;i<11;i++)
  printf("%d ",a[i]);
  return 0;
}
//StudybarCommentEnd

  • 写回答

3条回答 默认 最新

  • 海拥✘ 全栈领域优质创作者 2023-05-25 11:03
    关注

    该回答引用自ChatGPT:在C语言中,数组作为函数参数传递时会退化为指针,因此无法在函数内部通过sizeof运算符获取数组的真实长度。

    在你的代码中,int len = sizeof(a)/sizeof(a[0]);这行代码计算的结果是错误的,因为此时a已经被退化为指向int类型的指针,所以sizeof(a)的结果是指针的大小,而不是数组的大小。因此,len的值会被错误地计算为2。

    要解决这个问题,你可以将数组的长度作为参数传递给insert函数。这样,函数就能够正确地知道数组的长度。

    下面是修改后的代码示例:

    #include<stdio.h>
    
    int insert(int a[], int num, int len) {
        int i;
        if (num > a[len - 2]) {
            a[len - 1] = num;
            return 0;
        }
        for (i = 0; i < len - 2; i++) {
            if (a[i] > num) {
                int j;
                for (j = len - 2; j >= i; j--) {
                    a[j + 1] = a[j];
                }
                a[i] = num;
                break;
            }
        }
        return 0;
    }
    
    int main() {
        int a[11] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
        int number, i;
        int len = sizeof(a) / sizeof(a[0]);  // 计算数组的长度
        scanf("%d", &number);
        insert(a, number, len);  // 将数组长度作为参数传递
        for (i = 0; i < 11; i++)
            printf("%d ", a[i]);
        return 0;
    }
    

    通过在main函数中计算数组的长度并将其传递给insert函数,你可以避免对数组长度的错误计算,并使代码正常运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 修改了问题 5月25日
  • 创建了问题 5月25日

悬赏问题

  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上