C99标准的变长数组形式参数有什么用?
本文介绍了C99标准的变长数组形式参数有什么用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
《C语言程序设计 现代方法》第2版
9.3.3 变长数组形式参数
问题:
1.这样定义数组形参,有什么意义?
用变长数组形式参数,我们可以明确说明数组a的长度就是n:
int sum_array(int n, int a[n])
{
...
}
但是这个n一样可以越界。
例如:
void M(int n, int a[n])
{
for(int i=0; i<n; i++)
printf("%d\n",a[i]);
}
int main()
{
int a[ ]={1,2,3,4,5,6};
M(7,a); //这样调用,数组越界!
}
一样可能越界,根本和void M(int n, int a[])一样的。
void M(int n, int a[n])这样声明到底有什么用? 这要做的目的是什么?要实现什么效果?
本人初学,完全看不懂为何会有这样一个功能。请各位高手指点。
解决方案
就是为了写代码更灵活阿,不过这个特性其实没什么用处,因为C11
已经把这个特性标识为可选,并且VS
不支持
只有比如gcc
等部分编译器支持。
关于越界,你要越界是任何人、任何语言阻止不了的,只是在别人的语言比如java
、C#
可能会抛出异常,在c/c++
里面会发生内存问题(c++
有些类也会抛出异常)或者其它各种奇怪的问题而已。。
这篇关于C99标准的变长数组形式参数有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文