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跳过==========
size在文件范围和块范围(在main函数中)都有一个对象.
要修复程序,可以删除函数中size对象的定义,main或者(首选解决方案)删除文件范围中的对象并将其作为新参数传递给ADDER函数.
如果您使用编译进行编译,则gcc可以使用-Wshadow警告,当变量影响另一个变量时,该警告将提醒您.
我看到的最大问题是你有两个size变量
size size宣布main该ADDER函数使用size从未分配的全局版本,因此它的功能不正确.最简单的解决方法是避免全局,只是传递大小ADDER.
void ADDER(int *a, int *b, int size) {
...
}
Run Code Online (Sandbox Code Playgroud)