【发布时间】:2017-05-10 15:53:13
【问题描述】:
我有这个代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
double b;int a[2],*c;
void myfunction();
c=(int*)(malloc(1));
b=10.;
*c=5;
a[1]=1;a[2]=2;
printf("before call %f $d $d %d\n",b,a[1],a[2],*c);
printf("before call %f $d $d %d\n",b,a[1],a[2],*c);
myfunction(b,a,c);
printf("after call %f $d $d %d\n",b,a[1],a[2],*c);
}
void myfunction(x,y,d)
double x;int y[2],*d;
{
double z;
x=2*x;
y[1]=3*y[1];
y[2]=3*y[2];
*d =*d+2;
}
当我执行它时,我会收到这个
before call 10.000000 $d $d 1
before call 10.000000 $d $d 1
after call 10.000000 $d $d 3
我希望在第一次和第二次通话中获得 5,在最后一次通话中获得 7,也 a[i] 未显示。 你能告诉我为什么吗? 谢谢
【问题讨论】:
-
%,不是$... -
c=(int*)(malloc(1)); [...] *c=5;越界访问,未定义行为。 -
另外 FWIW 这段代码是超级非惯用的 - 在同一行声明不同类型的变量,在函数内部声明的函数,旧式函数定义。
-
你是从一本 30 年前的教科书学习 C 吗?请查找更新的内容。
-
啊! K & R. 省点麻烦,使用 C11。