#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct stock {
char symbol[5];
int quantity;
float price;
};
struct stock *invest;
/*Create structure in memory */
invest=(struct stock *)malloc(sizeof(struct stock));
if(invest==NULL)
{
puts("Some kind of malloc() error");
exit(1);
}
/*Assign structure data */
strcpy(invest->symbol,"GOOG");
invest->quantity=100;
invest->price=801.19;
/*Display database */
puts("Investment portfolio");
printf("Symbol\tShares\tPrice\tValue\n");
printf("%-6s\t%5d\t%.2f\t%%.2f\n",\
invest->symbol,
invest->quantity,
invest->price,
invest->quantity*invest->price); /* I dont understand this line */
return(0);
}
符号 - GOOG
股票-100
价格 - 801.19
价值 - %。2f
line33
处的最终指针引用如何导致输出%。2f?
(我知道%%用于显示%]
为什么在程序中重新分配内存?
假设,如果我要在投资指针的代码中添加realloc()
函数,它将如何影响程序或使其在性能方面更好?<登记/>
realloc()
如何帮助“释放”记忆?
(我无法完全理解realloc()
与malloc()
的关系)
答案 0 :(得分:0)
%%。2f需要额外的%符号才能使最终的.2f成为格式,而不是显示的字符串文字。
其次realloc旨在调整内存中先前调用的数组的大小。
答案 1 :(得分:0)
第33行的最终指针引用如何导致输出%。2f?
因为%%
会导致printf显示%
符号,而不会将第二个%
视为格式说明符的开头。留下.2f
,这是printf术语中的文字字符,要逐字打印。
为什么在程序中重新分配内存?
realloc
用于更改先前malloc内存区域的大小,同时尽可能多地保留其中的数据。在您的情况下,您分配了足够的内存来存储struct stock
的一个实例。如果你决定要两个实例,你可以这样做:
invest = realloc(sizeof(struct stock) * 2);
这几乎相当于
struct stock* newInvest = malloc(sizeof(struct stock) * 2);
memcpy(newInvest, invest, sizeof(struct stock));
free(invest);
invest = newInvest;
不同之处在于realloc
可以检查原始内存块,看它是否可以扩展,这比分配新块,复制数据和释放旧块快得多。
我不理解这一行
invest->quantity*invest->price);
这只是一个表达式,它将数量和价格相乘。