簡體   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