使用结构指针的源代码
Source code using a structure pointer
#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?
(我知道 %% 是用来显示 %]
为什么要在程序中重新分配内存?
假设,如果我要在代码中为 invest 指针添加一个 realloc()
函数,它将如何影响程序或使其更好性能方面?
realloc()
如何帮助 'freeing' 记忆?
(我不太明白realloc()
和malloc()
的关系)
%%.2f 需要一个额外的 % 符号来使最终的 .2f 成为一种格式,而不是显示的字符串文字。
其次,realloc 旨在调整内存中先前调用的数组的大小。
How is the final pointer reference at line33 leading to the output %.2f ?
因为 %%
导致 printf 显示一个 %
符号而不将第二个 %
视为格式说明符的开始。剩下的 .2f
只是 printf 术语中的文字字符,要逐字打印。
Why exactly is memory reallocated in a program?
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
可以检查原来的内存块,看看它是否可以扩展,这比分配新块、复制数据和释放旧块要快得多。
I dont understand this line
invest->quantity*invest->price);
这只是一个数量乘以价格的表达式。
#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?
(我知道 %% 是用来显示 %]为什么要在程序中重新分配内存?
假设,如果我要在代码中为 invest 指针添加一个 realloc()
函数,它将如何影响程序或使其更好性能方面?
realloc()
如何帮助 'freeing' 记忆?
(我不太明白realloc()
和malloc()
的关系)
%%.2f 需要一个额外的 % 符号来使最终的 .2f 成为一种格式,而不是显示的字符串文字。
其次,realloc 旨在调整内存中先前调用的数组的大小。
How is the final pointer reference at line33 leading to the output %.2f ?
因为 %%
导致 printf 显示一个 %
符号而不将第二个 %
视为格式说明符的开始。剩下的 .2f
只是 printf 术语中的文字字符,要逐字打印。
Why exactly is memory reallocated in a program?
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
可以检查原来的内存块,看看它是否可以扩展,这比分配新块、复制数据和释放旧块要快得多。
I dont understand this line
invest->quantity*invest->price);
这只是一个数量乘以价格的表达式。