动æ€åˆ†é…数组而无需mallocå’Œcalloc

时间:2019-03-07 14:46:32

标签: c arrays dynamic-memory-allocation

printf("Enter number of elements\n");
scanf("%d",&n);
int num[sizeof(int)*n];

这是动æ€åˆ†é…数组大å°çš„正确方法å—?

1 个答案:

答案 0 :(得分:3)

éžæ­£å¼æœ¯è¯­åŠ¨æ€åˆ†é…几乎å¯ä»¥è‚¯å®šåœ°æ˜¯æŒ‡æ­£å¼æœ¯è¯­å·²åˆ†é…存储,这æ„味ç€ä»Žmalloc / calloc / realloc返回的堆内存。

>

当然,还有其他“动æ€çš„东西â€ï¼Œä¾‹å¦‚动æ€å¢žé•¿å’Œä¸‹æ²‰çš„堆栈,但是我们ä¸å°†å †æ ˆåˆ†é…称为动æ€åˆ†é…。

因此,如果没有malloc / calloc / realloc,就无法进行动æ€åˆ†é…。


您的示例中有一个å¯å˜é•¿åº¦æ•°ç»„(VLA)。它们在è¿è¡Œæ—¶åˆ†é…,通常在堆栈上。您使用ä¸æ­£ç¡®ã€‚您应该

  1. 在创建数组之å‰ï¼ŒéªŒè¯n是1到max范围内的有效值。
  2. 用int num[n];分é…VLA。