C - 使用动态数组向自身添加数组

Amj*_*jad 1 c arrays allocation dynamic

我为此开始了一个不同的线程,我尝试使用他们给我的帮助解决它,但我无法运行该程序.任何人都可以告诉我程序中有什么问题,它应该如何?谢谢.

该程序应该为自己添加一个数组并用总和替换原始数据,因此当打印初始数组时,它会打印总和.这就是我到目前为止所做的.

请注意,必须使用ADDER(a,a)作为函数调用.我不允许改变它.两个参数都将通过引用传递.

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int size; //global variable

void ADDER(int *a, int *b) {
    int i;
    for (i = 0; i < size; i++) {
        b[i] += a[i];
    }     
}

int main() {
    int n, i;
    printf("Enter the number of elements: ");
    scanf("%d", &n);
    int *a = (int *)malloc(n*sizeof(int));
    int *b;
    for (i=0; i<n; i++) {
        printf("Enter element number %d: ", i);
        scanf("%d", &a[i]);
    }
    ADDER(a,a);
    for (i=0; i<n; i++) {
        printf("%d", a[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

1> ------ Build build:项目:adderTest,配置:调试Win32 ------

1> adder.c

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(17):警告C4996:'scanf':此函数或变量可能不安全.请考虑使用scanf_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.

1> e:\ program files\microsoft visual studio 10.0\vc\include\stdio.h(304):查看'scanf'的声明

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(18):错误C2143:语法错误:缺少';' 在'类型'之前

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(19):error C2143:语法错误:缺少';' 在'类型'之前

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(22):error C2065:'a':未声明的标识符

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(22):错误C2109:下标需要数组或指针类型

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):error C2065:'a':未声明的标识符1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4047:'function':'int*'的间接级别与'int'不同

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4024:'ADDER':正式和实际参数1的不同类型

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):error C2065:'a':未声明的标识符

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4047:'function':'int*'的间接级别与'int'不同

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(24):warning C4024:'ADDER':正式和实际参数2的不同类型

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(26):error C2065:'a':未声明的标识符

1> e:\ my documents\visual studio 2010\projects\addertest\addertest\adder.c(26):错误C2109:下标需要数组或指针类型

==========构建:0成功,1失败,0最新,0跳过==========

oua*_*uah 7

size在文件范围和块范围(在main函数中)都有一个对象.

要修复程序,可以删除函数中size对象的定义,main或者(首选解决方案)删除文件范围中的对象并将其作为新参数传递给ADDER函数.

如果您使用编译进行编译,则gcc可以使用-Wshadow警告,当变量影响另一个变量时,该警告将提醒您.


Jar*_*Par 5

我看到的最大问题是你有两个size变量

  • 全球 size
  • 当地size宣布main

ADDER函数使用size从未分配的全局版本,因此它的功能不正确.最简单的解决方法是避免全局,只是传递大小ADDER.

void ADDER(int *a, int *b, int size) {
 ...
}
Run Code Online (Sandbox Code Playgroud)