我有这段代码
before call 10.000000 $d $d 1
before call 10.000000 $d $d 1
after call 10.000000 $d $d 3
当我执行它时,我收到了
foward.py
我希望在第一次和第二次通话中获得5次,在最后一次通话中获得7次 a [i]未显示。 你能告诉我为什么吗? 感谢
答案 0 :(得分:1)
您的代码应该如何显示
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void myfunction(double x, int y[2], int *d);
int main(int argc, char **argv)
{
int a[2];
int *c = malloc(sizeof(int));
double b=10.0;
*c = 5;
a[0]=1;
a[1]=2;
printf("before call %f %d %d %d\n",b,a[0],a[1],*c);
myfunction(b,a,c);
printf("after call %f %d %d %d\n",b,a[0],a[1],*c);
}
void myfunction(double x, int y[2], int *d)
{
double z;
x=2*x;
y[0]=3*y[0];
y[1]=3*y[1];
*d =*d+2;
}
注意,malloc正确的大小
数组从0开始
现代函数声明
首次使用时声明变量。
修复了prrintf格式(%not $)
答案 1 :(得分:0)
正如@OliverCharlesworth在评论中指出的那样,问题在于您使用$d
代替%d
。因此,format-string仅使用第一个参数a[1]
。只需将$d
替换为%d
,您的代码就可以正常运行。
在另一个节点上。 C是零索引的。您正在访问数组,就好像它们是一个索引一样。这将导致您在某些时候出现问题,因为您正在访问未分配的内存。因此,在声明数组int a[2]
时,应使用索引0
和1
来访问它。(a[0]
和a[1]
)
我冒昧地重写下面的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void myfunction(int x, int* y, int *d);
int main(int argc, char *argv[])
{
double b;
int a[2], *c;
c = (int*)(malloc(sizeof(c)));
b = 10.;
*c = 5;
a[0] = 1;
a[1] = 2;
printf("before call %f %d %d %d\n", b, a[0], a[1], *c);
printf("before call %f %d %d %d\n", b, a[0], a[1], *c);
myfunction(b,a,c);
printf("after call %f %d %d %d\n", b, a[0], a[1], *c);
}
void myfunction(int x, int * y, int * d)
{
x = 2 * x;
y[0] = 3 * y[0];
y[1] = 3 * y[1];
*d = *d + 2;
}