繁体   English   中英

C如何将指针传递给结构数组指针

[英]C how to pass pointer to struct array pointer

我意识到这很可能是语法问题,但是,我有一个结构:

struct pixel{
int pixel_num;
double lowest_dist;
int centroid;
double * location;
};

以及这些结构的数组struct pixel * pixel_data[10]和一个方法: void foo(double ** arr)并试图在该结构实例中传递location指针的地址以更新foo方法中的指针。

我试图像foo(&(pixel_data[0]->location))这样传递它,但是这显然是不正确的,因为当我运行gdb时, foo*arr值与main()中的值不同。叫foo。

谢谢。

一个例子:

#define DIMENSIONS 5
//Struct is declared in header.
//max 10 pixels
struct pixel * pixel_data[10];

int main(){
    double newLoc[DIMENSIONS]={1.1,2.2,3.3,4.4, 5.5};
    pixel_data[0]=add_pixel(newLoc);
    update_centroid_location(&(pixel_data[0]->location), 0, DIMENSIONS);
}
void update_centroid_location(double **centroid, int centroid_num, int numpix){
    double * old_cent=malloc(DIMENSIONS*sizeof(double));
    if(!old_cent){
    perror("couldnt allocate memory");
    exit(4);
    }   
    for(int i=0;i<DIMENSIONS;i++){
    old_cent[i]=*centroid[i]; //segfaults here as cannot access memory address
    }   
}
struct pixel * add_pixel(double * location){
    struct pixel * new=malloc(sizeof(struct pixel));
    if(!new){
    perror("Could not allocate space for pixel");
    exit(4);
    }   
    new->lowest_dist=DBL_MAX;
    new->centroid=0;
    new->location=location;
    return new;
}

在那一行old_cent[i]=*centroid[i]; 关于运算符优先级的误解。
*运算符的优先级低于[]
因此,您实际上是在做old_cent[i]=*(centroid[i]);

尝试使用括号明确表示要先解除引用,然后为第二次解除添加偏移量,如下所示:

old_cent[i]=(*centroid)[i];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM