gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:42 24 4
gpt4 key购买 nike

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

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 时 *arr foo 中的值不同比他们在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]; 这行对operator precedence有误解.
* 运算符的优先级低于 []
所以你实际上是在做 old_cent[i]=*(centroid[i]);

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

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

关于C如何将指针传递给结构数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com