我有
结构:

typedef struct Rental {
  int nDays;
  float kmsDriven;
  char carLicensePlate[LICENSE_PLATE_LENGTH+1];
  char *clientName;
  char chargingCategory;
} Rental;


通过动态分配的指针数组(这里是项目的一部分)来存储和访问不同的-Rental类型结构:

int main (){

    Rental *rentals;

    int max_num;

    printf("Give a number of rentals you would like to store and manage: ");

    scanf("%d", &max_num);

    rentals=(Rentals *)malloc(max_num * (sizeof(Rental)))


到目前为止,这是我一直想的,但我无法完全理解...所以:


我无法理解*rentals如何成为数组。我的意思是至少不应该这样声明:Rental *rentals[];?我知道如果我编译上面的代码,我会看到一个错误...但是为什么?
我已经在Stack Overflow上阅读了很多有关使用双指针(Rental **rentals;)进行此操作的文章,但是其他人张贴的代码通常让我很难阅读(我不知道所有功能等等)。
假设我有一个对象rentals[0],它将是指向rentals的指针。如果我想将结构传递给函数,我应该写:
variable=function(*arguments*... , Rental *rentals[0]);

最佳答案

rentals是一个指针,而不是一个数组,但是它是指向max_num结构块的第一个(第零个)元素的指针,因此可以将其视为数组,因为可以使用rentals[n]进行引用到数组的第n个元素。
这不是问题,因此是无法回答的。



  
  假设我有一个对象rentals[0],它将是指向rentals的指针。如果我想将结构传递给函数,我应该写:variable=function(*arguments*... , Rental *rentals[0]);吗?
  



rentals[0]不是指针;它是struct RentalRental
如果要将结构传递给函数,请编写:

variable = function(…args…, rentals[0]);


如果您想将指向结构的指针传递给函数,请编写:

variable = function(…args…, &rentals[0]);


要么:

variable = function(…args…, rentals);


它们将相同的地址传递给函数。


您应该对scanf()的调用进行错误检查以确保您有一个数字,并且应该对您获得的数字进行错误检查(严格来说,它应该是正数,而不是零或负数),并且应该错误地检查由返回的值malloc()

关于c - 有关大学项目的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34259034/

10-13 06:18