我有
结构:
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 Rental
或Rental
。
如果要将结构传递给函数,请编写:
variable = function(…args…, rentals[0]);
如果您想将指向结构的指针传递给函数,请编写:
variable = function(…args…, &rentals[0]);
要么:
variable = function(…args…, rentals);
它们将相同的地址传递给函数。
您应该对
scanf()
的调用进行错误检查以确保您有一个数字,并且应该对您获得的数字进行错误检查(严格来说,它应该是正数,而不是零或负数),并且应该错误地检查由返回的值malloc()
。关于c - 有关大学项目的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34259034/