将Struct数组作为指针传递

时间:2018-06-07 16:45:12

标签: c pointers struct

我想将struct数组作为print函数的参数传递,然后访问其成员进行打印。为什么我不指示任何指针时会出现指针错误?

在main.c中:

struct city {
    double longitude;
    double latitute;
    char name[buf_size]; 
};
int numCitToRead = 10;
struct city cities[25];
printCities(&numCitToRead, cities);

注意:Struct数组在文件解析函数中初始化。它总是25个字段长,但如果numCitToRead是10,则只填充10个字段

int printCities(int* t_numCitToRead, struct city t_cities[25]) {

    for (unsigned short i = 0; i < *t_numCitToRead; i++) {
        printf("\n\n\tCity %d: ", i+1);
        printf("\nname:\t\t%s", t_cities[i].name);
        printf("\nlongitude:\t%f", t_cities[i].longitude);
        printf("\nlatitude:\t%f", t_cities[i].latitute);
    }
    return 0;
}

我希望有人可以帮助我!

问候

2 个答案:

答案 0 :(得分:0)

现在修改了代码及其工作原理。 让我们试一试:

#include <stdio.h>

struct city {
    double longitude;
    double latitute;
    char *name; 
  };

int printCities(int* t_numCitToRead, struct city t_cities[25]) {

    for (unsigned short i = 0; i < *t_numCitToRead; i++) {
    printf("\n\n\tCity %d: ", i+1);
        printf("\nname:\t\t%s", t_cities[i].name);
        printf("\nlongitude:\t%f", t_cities[i].longitude);
        printf("\nlatitude:\t%f", t_cities[i].latitute);
    }
    return 0;
}

int main() {
  int numCitToRead = 10;
  struct city cities[25];
  // create dummy data
  for(int i =1; i<=25; i++)
  {
   cities[i-1].name = "name";
   cities[i-1].longitude =  10 * i;
   cities[i-1].latitute = 10 * 20;
  } 
 printCities(&numCitToRead, cities);
 return 0;
}

谢谢!

答案 1 :(得分:0)

感谢大家的大力支持和有用的意见和建议。

在调整了这个帖子中人们指出的一些不同的东西之后,它最终成功编译了。

我调整的事情是:

  • 将头文件包含在printFunctions文件中的city struct数据类型定义中

  • 初始化结构以解决指针错误

感谢您提供的反馈和意见/建议。

度过美好的一天!