我正在尝试将指向结构的指针数组传递给函数。然后将该数组的地址分配给一个指针,并使用该指针来索引数组中的元素。
下面我创建了一个结构体的三个实例并分配了结构体值,然后创建了一个指针数组并使数组中的元素指向这些结构体。
然后,我将结构数组传递给一个函数,该函数以两种不同的方式打印其结构值...
第一种方法是对传递给函数的数组进行索引并打印出各个结构中的值...... 这很好用!
第二种方法是我将数组分配给一个指针,然后索引该指针以打印出数组中的值...这不能正常工作
struct name_struct_pointer {
char *name1;
char *name2;
};
int main(void) {
struct name_struct_pointer name_struct_pointer_inst_1 = {"name one","name two"};
struct name_struct_pointer name_struct_pointer_inst_2 = {"name three","name four"};
struct name_struct_pointer name_struct_pointer_inst_3 = {"name five","name six"};
struct name_struct_pointer * name_struct_pointer_array[3] = {
&name_struct_pointer_inst_1,
&name_struct_pointer_inst_2,
&name_struct_pointer_inst_3
};
print_array_of_name_struct(name_struct_pointer_array,3);
return EXIT_SUCCESS;
}
void print_array_of_name_struct(struct name_struct_pointer * name_struct_pointer_array[],int size){
puts("print data indexed by function arg");
for(int i = 0; i < size;i++){
printf("print_name_struct : %s : %s \r\n",name_struct_pointer_array[i]->name1,name_struct_pointer_array[i]->name2);
}
struct name_struct_pointer * local_name_struct_pointer_array = name_struct_pointer_array;
puts("print data indexed by local pointer");
for(int i = 0; i < size;i++){
printf("print_name_struct : %s : %s \r\n",local_name_struct_pointer_array[i].name1,local_name_struct_pointer_array[i].name2);
}
}
我预计指针索引方法的输出会给出相同的结果,但这并没有发生。我的数据版本被破坏了,不正确。
打印由函数arg索引的数据
print_name_struct : 名称一 : 名称二
print_name_struct : 名称三 : 名称四
print_name_struct : 名称五 : 名称六
打印本地指针索引的数据
print_name_struct : dP@ : vP@
print_name_struct : ïP@ : 说出五个
print_name_struct : 名称六 : 名称三
我怀疑将数组分配给指针时发生了一些事情。据我了解,如果我将数组分配给指针,我可以使用指针算术来索引数组中的数据。我不明白什么?
最佳答案
方式 1: *local_name_struct_pointer_array
应声明为双指针 **local_name_struct_pointer_array
,因为您分配的指针大小不兼容。
然后,您还应该将访问结构体成员的方式从 pointer[i].member
更改为 pointer[i]->member
。
方式2:其他方式应该是保持你编写代码的方式,并且只将指针分配更改为:*local_name_struct_pointer_array = name_struct_pointer_array[0]
,所以您将获取指针数组的第一个元素,然后循环遍历这些元素。
关于c - 将结构体指针数组传递给c中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735692/