数组能动态分配吗?

来源:百度知道 编辑:UC知道 时间:2024/09/20 02:30:58
书上有这样一段程序:typedef struct{
unsigned int weight;
unsigned int parent, lchild, rchild;
}HTNode, *HuffmanTree; //动态分配数组存储哈夫曼树
typedef char * * HuffmanCode; //动态分配数组存储哈夫曼编码表
... ...
HuffmanTree HT;
HT=(HuffmanTree)malloc( (m+1)*sizeof(HTNode)); //m已赋值
... ...
HT[i].parent=... //HT能当做数组用吗?
我总感觉这是错的,有谁能帮我解答一下,谢谢!

数组可以动态分配,参考代码如下:
  int *a;
  int N;
  scanf("%d", &N);
  a = (int *) malloc(N * sizeof(int));
  ....
  free(a);

  这样就动态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。
  #include
  #include
  int main()
  {
  int i = 0;

  int *a;
  int N;
  printf("Input array length: ");
  scanf("%d", &N);
  printf("\n");
  a = (int *) malloc(N * sizeof(int));//int 可以用*a来代替
  
  for(i = 0; i < N; i++)
  {
  a[i] = i + 1;

  printf("%-5d", a[i]);
  if ((i + 1) % 10 == 0)
  printf("\n");
  }
  free(a);
  printf("\n");
  return 0;
  }
  这样就完成了数组a[N]的动态分配。

你要理解一下子数组表示的本质含义,用HT[i]不是说非得HT是一个数组,HT[i]的意思是指*(HT+i),在数组中也是一样的,如果你定义了int a[10];赋值为连续的1-10个整数,那么你取a[9],值就是10,那么你要是取9[a]是什么呢,也许你会觉得这个是错误的,但是你会看到没有错,输出也是10,这就说明了数组的表示是指针的实质,9[a]