这是 Robert Wood 的“C Programming for Scientists and Engineers”中的 Program 3.7。在下面的代码中,指针没有在 main() 的主体中声明和初始化,而是直接在 read_data() 函数的参数列表中。
通常,在写代码的时候,我会先声明3个指针(int *int_ptr, float *float_ptr, char *char_ptr),然后将a、b、c的地址分配给它们。但是在下面的程序中,调用 read_data(&a, &b, c); 时会传递“地址”运算符。通过 void read_data(int *int_ptr, float *float_ptr, char *char_ptr){...} 的参数列表,我们有“内容”运算符,这看起来不一致,但有效。另外, fscanf(stdin,"%d %f %s", int_ptr, float_ptr, char_ptr); 将用户提供的数据存储在指针的地址中,而我认为应该将它们写入变量 a、b 和 c 的内容中,如下所示:
fscanf(stdin,"%d %f %s", int_*ptr, *float_ptr, *char_ptr);
但我错了。
否则程序可以工作,但如果我必须这样写,我将无法做到。所以,我希望你帮助我理解并提供替代解决方案。
/* Program 3.7- Use of functions for input and output of data */
#include <stdio.h>
int main(void) {
int a;
float b;
char c[11];
/* function prototype */
void read_data(int *, float *, char *);
void write_data(int, float, char[]);
/*call the function*/
read_data(&a, &b, c);
write_data(a, b, c);
return (0);
}
/*Function: read_data - reads an int, float and char string*/
void read_data(int *int_ptr, float *float_ptr, char *char_ptr) {
fprintf(stdout, " Supply an integer, a float and a string (max. 10 chars):");
fscanf(stdin, "%d %f %s", int_ptr, float_ptr, char_ptr);
return;
}
/* Function: write_data - displays an int, float and char string*/
void write_data(int i, float j, char k[]) {
fprintf(stdout, " The supplied data is: %d %f %s\n", i, j, k);
return;
}