[英]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.