【发布时间】:2017-12-10 03:52:20
【问题描述】:
我正在尝试将指向结构的指针数组传递给函数。然后将该数组的地址分配给一个指针,并使用该指针来索引数组中的元素。
下面我创建了一个结构的三个实例并分配了结构值,然后我创建了一个指针数组并让数组中的元素指向这些结构。
然后我将结构数组传递给一个函数,该函数以两种不同的方式打印结构的值...
第一种方法是索引我传递给函数的数组并打印出各个结构中的值.... 这很好用!
第二种方法是我将数组分配给一个指针,然后我索引这个指针以打印出数组中的值......这不能正常工作
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 : 名字六 : 名字三
我怀疑将数组分配给指针时发生了一些事情。我的理解是,如果我将数组分配给一个指针,我可以使用指针算法来索引数组中的数据。我不明白什么?
【问题讨论】:
-
选择 C++ 或 C 而不是两者兼而有之。