Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C如何将指针传递给结构数组指针_C_Pointers - Fatal编程技术网

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

C如何将指针传递给结构数组指针,c,pointers,C,Pointers,我意识到这很可能是语法问题,但我有一个结构: struct pixel{ int pixel_num; double lowest_dist; int centroid; double * location; }; 以及这些结构的数组struct pixel*pixel_data[10] 还有一个方法:void foo(double**arr),我试图在结构实例中传递位置指针的地址,以更新方法foo中的指针 我试图像这样传递它foo(&(pixel_data[0]->location))但是这

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

struct pixel{
int pixel_num;
double lowest_dist;
int centroid;
double * location;
};
以及这些结构的数组
struct pixel*pixel_data[10]
还有一个方法:
void foo(double**arr)
,我试图在结构实例中传递
位置
指针的地址,以更新方法
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;
}
#定义尺寸5
//结构在标头中声明。
//最大10像素
结构像素*像素_数据[10];
int main(){
双newLoc[DIMENSIONS]={1.1,2.2,3.3,4.4,5.5};
像素_数据[0]=添加_像素(newLoc);
更新质心位置(&(像素数据[0]->位置),0,尺寸);
}
无效更新\u质心\u位置(双**质心,int质心\u num,int numpix){
double*old_cent=malloc(尺寸*sizeof(double));
如果(!旧分){
perror(“无法分配内存”);
出口(4);
}   
对于(inti=0;ilowest\u dist=DBL\u MAX;
新建->质心=0;
新建->位置=位置;
归还新的;
}

行中的
旧分[i]=*质心[i];
存在误解。
*
运算符的优先级低于
[]

所以你基本上是在做
old_cent[i]=*(质心[i]);

尝试使用括号显式表示希望第一次取消引用,然后添加第二次取消引用的偏移量,如下所示:

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

您应该提供一个-我发现很难理解函数调用的问题是什么您知道
struct pixel*pixel_data[10]
是一个由10个无效指针组成的数组,需要初始化,不是吗?这只是可能出错的一个方面,这就是为什么看到更多的代码会更好。
int i-0
无效。此外,该代码在许多其他方面仍然不完整。创建一些编译并显示您的问题的内容。
printf(“%c”,location[i]);
有点难以解释,因为它是
location
的第一次出现,并且通常在代码和/或描述中没有字符变量(对于
%c
)的痕迹。上面的示例应该更有用。抱歉。@UnholySheep