在C中使用动态内存

sna*_*kec 1 c dynamic

我是C语言的新手.我在分配动态数组时遇到问题.

我曾经在循环之外分配内存a=(int*)malloc(5* sizeof(int));,所以每件事情都运行良好.现在我想在循环中逐个为每个元素分配内存malloc(),但代码不起作用.

我尝试过不同的选择,scanf("%d",a) &a++,scanf("%d",&a[i]);但不能成功.如果有人能告诉我我做错了什么并彻底向我解释这个概念,我将感激不尽.

我遇到问题的代码如下:

#include <stdio.h>
#include<stdlib.h>

int main()
{
  int *a;
  int i;
  system("clear");

  for(i=0;i<5; i++)
  {
    a=(int *)malloc(sizeof(int));
    printf("%u",&a);
    printf("please enter the element in array");
    scanf("%d",a[i]);
  }
  for(i=0;i<5; i++)
  {
    printf("\nthe %d entry in the array %d",i,a[i]);
  } 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 6

数组是单个"对象"(单个事物),它具有许多项目的空间,所有项目都是相同的类型.

您希望能够以某种方式一次分配一个项目是不正确的,这根本不是数组的工作方式.

应该像先说的那样,malloc()为5个项目分配一个单独的房间,然后将每个项目存储到循环内的数组中的正确位置.

我建议使用scanf("%d", &a[i])读取和存储到数组中.还有其他方法来编写第二个参数,但是(在我看来)这对初学者来说是最清晰和最好的.它读作"数组a中i:th项的地址".