【问题标题】:C- Passing and Deferencing Structure ArraysC- 传递和引用结构数组
【发布时间】:2012-09-26 23:11:22
【问题描述】:

我有这个 Point 结构的 C 代码:

typedef struct Point{
 int x, y;
} Point;

void one(Point P) {
 p.x = 1;
 p.y = 1;
}

我想创建一个指向 50 个点的数组的指针,然后将这些数组成员中的一些传递给一个函数。

我试过了

struct Point (*mypointer)[50];
one(mypointer[i]);

但得到“预期的'Point',但参数的类型是'struct Point'” 然后我尝试推迟指针

one(&mypointer[i])

但得到“预期的'Point',但参数的类型为'struct Point (*)[(long unsigned int)N]” 我该怎么办?谢谢。

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    这是因为函数one 的参数不是对结构的引用,而是对真实数据(分配在堆栈上)的引用。

    尝试使用:

    void one(Point *p) {
     p->x = 1;
     p->y = 1;
    }
    

    在任何情况下,声明为struct Point *mypointer[50] 的数组都不是指向点的数组,而是指向点的指针数组(您必须一个一个地分配)。如果你希望只有一个数组指向你应该使用的点

    Point points[50];
    one(&points[i])
    

    【讨论】:

    • 数组实际上被声明为Point (*mypointer)[50];,它是一个指向50个Points的array的指针,而不是一个指针数组。数组不是指针。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 2013-05-12
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多