gpt4 book ai didi

C语言与数据结构

转载 作者:行者123 更新时间:2023-11-30 14:36:56 25 4
gpt4 key购买 nike

我对动态内存分配 (malloc) 有疑问说

ivar=(int*)malloc(1*sizeof(int));

上面的代码会做什么?它会创建分配地址吗?

另外,哪种是在 malloc 中获取值的标准方法? (称 i 为循环变量)

scanf("%d",&ivar[i]);

或者

scanf("%d",ivar+i); 
int main()
{

int *ivar;
ivar=(int*)malloc(1*sizeof(int));
printf("%u",ivar); // outputs 2510
printf("%u",&ivar);// outputs 65524

} // please explain why it is…

提前致谢。

最佳答案

使用 malloc 分配的内存是在 RAM 的堆部分中创建的。

ivar=(int*)malloc(1*sizeof(int));

malloc 的语法是

void *malloc(size_t size);

(1*sizeof(int)) 给出 4 个字节,因此在堆中分配 4 个字节。

无法直接访问堆内存,因此使用ivar指针来访问它。

当你写的时候

printf("%p",ivar); // outputs 2510

printf("%p",&ivar);// outputs 65524

这两个都给出了地址,第一个给出了指针所指向的位置的地址,第二个给出了指针的地址

scanf("%d",&ivar[i]);

scanf("%d",ivar+i);

两者是相等的,因此您可以使用其中之一。

关于C语言与数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com