我为此启动了一个不同的线程,我尝试使用他们给我的帮助来解决它,但我无法运行程序有人能告诉我这个程序有什么问题,应该怎么做吗谢谢。
程序应该向自身添加一个数组,并用和替换原始数组,因此当打印初始数组时,它会打印和这就是我到目前为止所做的。
请注意,必须使用加法器(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]);
    }
}

错误:
1>----生成已启动:项目:adderTest,配置:调试Win32------
1>加法器c
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(17):警告C4996:“scanf”:此函数或变量可能不安全。考虑改用scanf_。若要禁用否决,请使用“CRT_SECURE_NO_警告”有关详细信息,请参阅联机帮助。
1>e:\程序文件\microsoft visual studio 10.0\vc\include\stdio.h(304):请参见“scanf”声明
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(18):错误C2143:语法错误:在“type”之前缺少“;”
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(19):错误C2143:语法错误:在“type”之前缺少“;”
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(22):错误C2065:“a”:未声明的标识符
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(22):错误C2109:下标需要数组或指针类型
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):错误C2065:“a”:未声明的标识符
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4047:“函数”:“int*”与“int”的间接寻址级别不同
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):warning C4024:“adder”:形式参数和实际参数1的不同类型
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):错误C2065:“a”:未声明的标识符
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4047:“函数”:“int*”与“int”的间接寻址级别不同
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(24):警告C4024:“adder”:形式参数和实际参数的不同类型2
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(26):错误C2065:“a”:未声明的标识符
1>e:“我的文档”\visual studio 2010\projects\addertest\addertest\adder.c(26):错误C2109:下标需要数组或指针类型
====生成:0成功,1失败,0最新,0跳过==========

最佳答案

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

/* global variable to store the size */
int g_size;

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

    return;
}

int main(void)
{
    int n, i;

    printf("Enter the number of elements: ");
    scanf("%d", &n);

    int *a = NULL;
    if ((a = (int *)malloc(n * sizeof(int))) == NULL) {
        printf("unable to allocate memory \n");
        return -1;
    }

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

    g_size = n;
    ADDER(a, a);

    for (i=0; i<n; i++) {
        printf("%d \n", a[i]);
    }

    free(a);
    return 0;
}

我做了以下修改:
检查malloc()时出错
一旦完成,记忆就消失了
格式化输出
已删除,因为不需要
终于成功了:)
编辑:根据操作作者的要求更新代码。

关于c - C-使用动态数组向自身添加数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8717233/

10-11 22:55