1

我在下面编写了代码,其中包含一个带有指向大小为 3 的双精度数组的指针的函数。我的问题是:当我将指针的地址传递给双变量(显然不是数组)然后想要更改函数“f”中这个双变量的值如下所示,当我以这种方式实现时,结果是正确的并且变量的值发生了变化:

#include <stdio.h>
void f(double (*)[3]);
double a = 7.5;

int main()
{
   double* b = &a;
   f(&b);
   printf("a = %lf\n", a);
   return 0;

}
void f(double (*hi)[3])
{
   double **sth = (double **) hi;\
   *(*sth) = 1;

}

但是当我如下实现时,值不会改变:

void f(double (*hi)[3]){
    (*hi)[0] = 1;
}

任何想法和建议肯定会受到赞赏。

4

1 回答 1

1

首先修复程序给出的编译错误。解决这些问题后,您将知道问题所在。

prog.c: In function 'main':
prog.c:8:6: error: passing argument 1 of 'f' from incompatible pointer type [-Werror=incompatible-pointer-types]
    f(&b);
      ^
prog.c:2:6: note: expected 'double (*)[3]' but argument is of type 'double **'
 void f(double (*)[3]);

http://ideone.com/mueyCU

#include <stdio.h>
void f(double (*)[3]);
double a = 7.5;

int main()
{
    double* b = &a;
    f(b);
    printf("a = %lf\n", a);
    return 0;

}

void f(double (*hi)[3]){
    (*hi)[0] = 1;
}

上面的代码不是正确的做事方式,应该不惜一切代价避免。

于 2015-10-12T17:58:19.080 回答