使用结构指针的源代码

时间:2015-03-10 07:35:44

标签: c pointers struct malloc realloc

#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()的关系)

2 个答案:

答案 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); 

这只是一个表达式,它将数量和价格相乘。