【发布时间】:2021-04-13 00:58:45
【问题描述】:
我对 C 语言还很陌生,而且我在使用指针时遇到了困难(我以前用 Python 编程)。所以,我有一个两个文件项目,主要的(.c)和另一个标题(.h)。我在标题一中声明了一个自定义类型 point_t 和一些函数,例如 p_middle,它从两个点开始计算中间点的坐标。我在头文件中测试了该函数并且它在那里工作,但是当我尝试在源文件中使用它时它没有。结构体point_t声明如下:
typedef struct point {
char p_name; // stores the point name as a single character
short p_dim; // stores the point dimension (it can be omitted and calculated using p_dimension)
double *p_start_coords; // pointer to the first coordinate of coordinate list
double *p_end_coords; // pointer to the last coordinate of coordinate list
} point_t;
函数 p_middle 的声明如下:
point_t p_middle (point_t p1, point_t p2) {
point_t p_middle;
// p_middle initialization
// some code here
return p_middle
}
所以在源文件中我尝试创建两个点:
point_t p1;
point_t p2;
double coord_set1[4] = {0, 2, 3, 4};
double coord_set2[4] = {3, 1, 6, 4};
p1.p_start_coords = &coord_set1[0];
p1.p_end_coords = &coord_set1[3];
p1.p_name = 'A';
p2.p_start_coords = &coord_set2[0];
p2.p_end_coords = &coord_set2[3];
p2.p_name = 'B';
然后我尝试在源文件中做:
p_m = p_middle(p1, p2);
printf("middle point of p1p2: (%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f, ", *p_m.p_start_coords);
++p_m.p_start_coords;
printf("%f)\n", *p_m.p_start_coords);
但是,当我尝试运行该程序时它不起作用,它会打印随机数 - 我认为 - 数字。有解决方案的想法吗?
附:对不起,我的英语还在练习中。
【问题讨论】:
-
看起来您正在为仅存在于函数中的数组分配指针。这些指针在函数返回后变得悬空,因为数组不再存在