囫囵觉w 2023-01-05 19:16 采纳率: 84.6%
浏览 26
已结题

关于#数组#的问题,如何解决?

定义了一个数组A[100],未赋初值,在函数中调用数组A,并多次使用该函数,发现A被覆盖(由于第一次使用给A 赋值的长度大于第二次,所以第二次赋值结果错误),但在主函数中直接使用A,并赋值,无误

错误代码:

#include<stdio.h>
#include<string.h>
void swap(char a[],char A[]){
    int len=strlen(a);
    int j=0;
    for(int i=0;i<len;i++){
        if(a[i]>='0'&&a[i]<='9'){ 
            A[j]=a[i];
            j++;
        }
        A[j]='\0';
    }
}
int main(void){
    char a[100],b[100]
    while(scanf("%s%s",a,b)!=EOF){
    char A[100],B[100];
    int n1,n2;
    swap(a,A);
    swap(b,B);
    sscanf(A,"%d",&n1);
    sscanf(B,"%d",&n2);
    if(a[0]=='-'){
        n1=-n1;
    }
    if(b[0]=='-'){
        n2=-n2;
    }
    printf("%d",n1+n2);
    }
    return 0;
} 









###### 正确代码

```c++
#include<stdio.h>
#include<string.h>

int main() {
    char a[20], b[20], A[20], B[20];
    int n1, n2;
    while (scanf("%s %s", a, b) != EOF) {
        int a_len = strlen(a);
        int j = 0;
        for (int i = 0; i < a_len; i++) {
            if (a[i] >= '0' && a[i] <= '9') {
                A[j] = a[i];
                j++;
            }
        }
        A[j] = '\0';
        sscanf(A, "%d", &n1);
        if (a[0] == '-') { n1 = -n1; }
        int b_len = strlen(b);
        int k = 0;
        for (int i = 0; i < b_len; i++) {
            if (b[i] >= '0' && b[i] <= '9') {
                B[k] = b[i];
                k++;
            }
        }
        B[k] = '\0';
        sscanf(B, "%d", &n2);
        if (b[0] == '-') { n2 = -n2; };
        printf("%d\n", n1 + n2);
    }
    return 0;
}


######想知道为什么第二种可行,数组值不会改变吗

  • 写回答

3条回答 默认 最新

  • ShowMeAI 2023-01-05 19:35
    关注

    第二种代码是正确的,因为它在函数内部声明了局部变量A和B,这两个变量的作用域只在函数内部。因此,每次调用函数时,A和B的值都会重新被赋值,而不会影响主函数中的A和B。


    在第一种代码中,你将A和B作为函数的参数传入,这意味着它们是引用传递。在函数内部,你对A和B进行了赋值操作,这将会改变它们的值。因此,当你在调用函数时,A和B的值可能会被改变,这可能会导致程序出现错误。

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

报告相同问题?

问题事件

  • 系统已结题 1月13日
  • 已采纳回答 1月5日
  • 修改了问题 1月5日
  • 修改了问题 1月5日
  • 展开全部

悬赏问题

  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧