我现在正在学习动态内存分配,这很难理解,特别是当讲师提到DMA和使用指针的结构时。
首先,在我的代码的第1行,我搞不清“&ptr->eno”是什么意思。我们将ptr初始化为一个指针,这意味着ptr保留了我们保留的内存的地址,假设ptr保留了地址2046,那么“&ptr->eno”是否意味着将值写入它指向的地址2046?
其次,在第2行,我如何打印出值,因为“ptr->eno”包含值“2046”,当我打印出来时,它会给我数字2046,而不是我试图存储在内存位置2046中的值。
我的代码是从讲稿中复制出来的,我试图在Visual studio上运行它,但在我输入值后它崩溃了。我对C很陌生,我的假设看起来很愚蠢,很难理解。如果你不明白我的解释,请告诉我如何使用指针和结构,也许我可以找出我的错误。谢谢你
#include<stdio.h>
#include<stdlib.h>
struct emp
{
int eno;
char ename[20];
float esal;
};
void main()
{
struct emp* ptr;
ptr = (struct emp*)malloc(sizeof(struct emp));
if (ptr=NULL)
{
printf("out of memory error");
}
else
{
printf("enter the value of employee: \n");
scanf_s("%d%s%f", &ptr->eno, ptr->ename, &ptr->esal); // line 1
}
printf("the name is: %s \t the number: %d \t the salary: %f", ptr->ename, ptr->eno, ptr->esal); //line2
}
最佳答案
假设
if (ptr=NULL)
是一个输入错误(因为随后的“它在我输入值后崩溃”不可能发生),这里有一个错误:
scanf_s("%d%s%f", &ptr->eno, ptr->ename, &ptr->esal);
缺少
%s
所需的大小参数scanf_s("%d%s%f", &ptr->eno, ptr->ename, 20, &ptr->esal);
或者代替硬编码,也许
scanf_s("%d%s%f", &ptr->eno, ptr->ename, (unsigned)sizeof ptr->ename, &ptr->esal);
关于c - 动态内存分配,在处理Structure时如何正确使用指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47431368/