C 使用结构指针的源代码 在最终输出中

C 使用结构指针的源代码 在最终输出中,c,pointers,struct,malloc,realloc,C,Pointers,Struct,Malloc,Realloc,符号-咕咕 股票-100 价格-801.19 值-%.2f 第33行的最终指针引用如何指向输出%.2f? 我知道%%用于显示%] 为什么程序中会重新分配内存 假设,如果我在代码中为invest指针添加一个realloc函数,它将如何影响程序或使其性能更好? realloc如何帮助“释放”内存 我无法完全理解realloc与malloc的关系。2f需要一个额外的%符号才能将最终的.2f转换为格式,而不是显示的字符串文字 其次,realloc用于调整内存中先前调用的数组的大小 第33行的最终指针引用

符号-咕咕 股票-100 价格-801.19 值-%.2f

第33行的最终指针引用如何指向输出%.2f? 我知道%%用于显示%]

为什么程序中会重新分配内存

假设,如果我在代码中为invest指针添加一个realloc函数,它将如何影响程序或使其性能更好? realloc如何帮助“释放”内存


我无法完全理解realloc与malloc的关系。2f需要一个额外的%符号才能将最终的.2f转换为格式,而不是显示的字符串文字

其次,realloc用于调整内存中先前调用的数组的大小

第33行的最终指针引用如何指向输出%.2f

因为%%会导致printf显示%符号,而不会将第二个%作为格式说明符的开头。这就剩下了.2f,它只是printf术语中的文字字符,需要逐字打印

为什么程序中会重新分配内存

realloc用于更改先前malloc的内存区域的大小,同时尽可能多地保留其中的数据。在本例中,您分配了足够的内存来存储struct stock的一个实例。如果您决定需要两个实例,可以这样做:

#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);

}
这几乎相当于

invest = realloc(sizeof(struct stock) * 2);
区别在于realloc可以检查原始内存块,看看它是否可以扩展,这比分配新块、复制数据和释放旧块要快得多

我不懂这句话


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

我知道%%用于显示百分比。这就是%%.2f输出%.2f的原因。另请注意:您似乎在编译时没有警告。invest->price=801.19应该会发出收窄警告。801.19是一个双字面值,填充到浮点值try 801.19f中。我使用code::blocks,在其中我可能需要更改编译器的设置。它有时不显示用于向初学者显示警告的代码的警告。小帮助?关于的强制链接。现在我真正想知道的是,那些一直教初学者这么做的白痴是谁?
struct stock* newInvest = malloc(sizeof(struct stock) * 2);
memcpy(newInvest, invest, sizeof(struct stock));
free(invest);
invest = newInvest;
invest->quantity*invest->price);