c - 如何将多个值添加到结构中
问题描述
我需要创建一个可以向我的结构添加至少 10 个不同 x,y 值的函数
typedef struct Point
{
float x, y;
}Point;
Point createPoint(double x, double y){
Point p[10];
for (int i = 0; i < 10; ++i){
if (isnan(p[i].x) == 0){
p[i].x = x;
p[i].y = y;
}
}
for (int z = 0; z < 2; ++z){
printf("%f\n", p[0].y);
}
}
int main(){
createPoint(5, 6);
createPoint(7, 9);
return 0;
}
打印时,我得到相同数字 p[0] 的 2 个值,但我需要能够以不同的数字达到不同的值
解决方案
该数组p
是函数的本地数组createPoint
,并且在函数退出时超出范围。这意味着您在一个函数调用中所做的更改在下一个函数调用中不可见。
此外,因为您不初始化 的值p
,所以不能依赖它们包含NaN
. 事实上,试图读取一个未初始化的变量会调用未定义的行为。
您的p
数组应该是main
函数的全局或本地数组,以便其生命周期扩展到多次调用createPoint
. 您还应该保留一个单独的计数器来记录当前存储了多少元素,p
以便您可以写入下一个可用插槽。
void createPoint(Point *p, double x, double y, int *count)
{
p[*count].x = x;
p[*count].y = y;
(*count)++;
}
void printPoints(Point *p, int count)
{
for (int z = 0; z < count; ++z){
printf("%f\n", p[z].y);
}
}
int main(){
Point p[10];
int count = 0;
createPoint(p, 5, 6, &count);
createPoint(p, 7, 9, &count);
printPoints(p, count);
return 0;
}
推荐阅读
- java - 是否可以使用 Kafka 将 Java 对象发送到 C# App
- c - 当我输入一个数字时,我的程序开始工作
- javascript - updateMany 具有不同的值 MongoDB
- kotlin - 在 Kotlin 中使用密封类时在 when 表达式中分组语句
- c# - 将文件从本地 C# winforms 应用程序安全地上传到生产环境中的 Google Cloud Storage Bucket
- css - 将引导程序属性继承到自定义类
- javascript - 在没有滚动动画的情况下使用scrollTo?
- javascript - 如何过滤那些 DIV 元素?
- javascript - 删除时访问会话存储
- c++ - 三元运算符中的递归函数是否被计算了两次?