学到数组的时候,接触到了变长数组的概念,这时候我就有疑问:
就是说例如:char str[]={0};
printf("Input a string: ");
gets(str);
puts(str);
与
1. #include <stdio.h>
2. int main()
3. {
4. int n;
5. printf("Input string length: ");
6. scanf("%d", &n);
7. scanf("%*[^\n]"); scanf("%*c"); //清空输入缓冲区
8. char str[n];
9. printf("Input a string: ");
10. gets(str);
11. puts(str);
12.
13. return 0;
14. }
之间有什么区别?
变长数组:数组长度为变量,在编译期间不能确定数组长度,要等到程序运行后,变量赋值后(数组定义语句不要写在变量赋值之前!),才能给数组分配内存。
变长数组本质还是静态数组(定义前大小可变,但定义后不能改变大小)。
要定义动态数组需要用malloc函数来申请内存。