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