C99标准的变长数组形式参数有什么用?

查看:112
本文介绍了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等部分编译器支持。
关于越界,你要越界是任何人、任何语言阻止不了的,只是在别人的语言比如javaC#可能会抛出异常,在c/c++里面会发生内存问题(c++有些类也会抛出异常)或者其它各种奇怪的问题而已。。

这篇关于C99标准的变长数组形式参数有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆