【发布时间】:2011-05-24 15:37:14
【问题描述】:
如何在 C 库提供的接口函数上执行变量传递?
例如我有如下接口函数:
void f( double *d ) { *d = 7.5; }
在我的应用程序中,我通过该库链接并调用该函数:
double p = 0;
f( &p );
但是,我注意到 p 仍然是 0 而不是 7.5。
【问题讨论】:
标签: c pointers parameter-passing
如何在 C 库提供的接口函数上执行变量传递?
例如我有如下接口函数:
void f( double *d ) { *d = 7.5; }
在我的应用程序中,我通过该库链接并调用该函数:
double p = 0;
f( &p );
但是,我注意到 p 仍然是 0 而不是 7.5。
【问题讨论】:
标签: c pointers parameter-passing
您的应用程序中是否有f 的原型?
如果没有,编译器会将p 的地址转换为int;如果它们的大小不同或使用相同的传递约定或其他什么,你就会遇到问题。
您应该#include "the_proper_header.h" 或者您可以直接在您的应用程序中添加原型,就在您调用函数之前。
double p = 0;
void f(double *);
f( &p );
【讨论】:
printf、malloc、sqrt、...、...)并未在使用它们的程序中定义。您真的在使用普通的旧 C 吗?您对“界面”的使用很奇怪(ish)
您的示例有效,请参阅http://codepad.org/JJL7eab5。
我所做的唯一更改是在定义 f() 之前声明它:
void f(double *);
如果函数定义被声明为静态,它也可以工作。在 C 中,函数需要在定义之前声明或声明为静态。
【讨论】: