user-0 提问: C99变长数组形参？

回复:
user: user-1
content: 初始化和赋值 傻傻分不清。

user: user-2
content: 第二个问题：实现的方式  #include <stdio.h>  typedef struct int5{   int a;   int b;   int c;   int d;   int e; } int5;   void c(){   int c = 0;   printf("\nc的地址 %p",&c); }  void fun(int n){   c();   int b[n];   b[2] = 0;   printf("\nb的地址 %p",b);   c(); }  int main(){   int a = 9999;   for(int i = 0 ; i<20;i++)     {       printf("%d",i);       fun(i);       printf("\na的地址 %p\n\n",&a);     } }  运行之后 你应该能猜测的出他的实现方式

user: user-2
content: 第一个问题 ：初始化  #include <stdio.h>  typedef struct int5{   int a;   int b;   int c;   int d;   int e; } int5;  void fun(int n){   int b[n] = {0,1,2,3,4,5};   b[2] = 0;   printf("\n%p",b); }  int main(){   int a = 9999;   for(int i = 0 ; i<20;i++)     {       printf("%d",i);       fun(i);       printf("\n%p\n\n",&a);     } }  bash-3.2$ clang t.c t.c:12:9: error: variable-sized object may not be initialized   int b[n] = {0,1,2,3,4,5};         ^ 1 error generated.

user: user-0
content: falcomavin： 引用bool init(int *array, int arrayLen, int index, int val)   {      if (array == null || index >= arrayLen)      return false;      array[index] = val;      return true;   }   怎么调用这个函数，给数组元素赋值？

user: user-0
content: 各位： 23楼，谁说说呢？

user: user-0
content: falcomavin：    怎样调用这个函数，数组元素怎赋值？ 给个完整程序，说明下。

user: user-0
content: 各位： 这个谁说说呢？

user: user-0
content: 16楼：   数组初始化为：任何值，怎办？

user: user-3
content: 引用 15 楼 Daffodiles 的回复: int n; scanf("%d",&n); int a[n];   数组a[n]，怎样初始化？  for (int i = 0; i < n; ++i) {   a[i] = i; }

user: user-4
content: 原来有这么很多不明就里的人。  对于静态数组，通过数组指针很容传递数组大小信息。  void foo(char (*pa)[5]) {   printf("%u\n", sizeof(*pa)); //5 } char a[5]; foo(&a);  变长数组想要类似的效果，只能通脱变长数组参数。   void bar(int len,  char (*pa)[len]) {    printf("%u\n",sizeof(*pa)); } int n = 100; char a[n]; bar(n,&a); //100 bar(5, &a); //5,编译不会报错， 认为实参是一个指向5个元素数组的指针。

user: user-3
content: 引用 17 楼 Daffodiles 的回复:16楼：   数组初始化为：任何值，怎办？  bool init(int *array, int arrayLen, int index, int val) {   if (array == null || index >= arrayLen)        return false;   array[index] = val;    return true; }

user: user-3
content: 引用 8 楼 Daffodiles 的回复:[quote=引用] 只是允许使用变量定义数组大小，而已，胜于C99之前的只运行编译期常量定义数组，败于动态大小数组 数组作函数形参，编译器会忽略数组长度！ 变长数组形参，编译器，会忽略数组长度么？[/quote]  会，变成数组形参并没改变数组本质，别想的太神奇了，它只是允许编译器去实现用变量在运行时定义数组大小，而已

user: user-0
content: 引用只是允许使用变量定义数组大小，而已，胜于C99之前的只运行编译期常量定义数组，败于动态大小数组 数组作函数形参，编译器会忽略数组长度！ 变长数组形参，编译器，会忽略数组长度么？

user: user-5
content: 引用 4 楼 Daffodiles 的回复: 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); //这样调用，数组越界！   }   问题： 1.C99变长数组形参，跟其它数组参数没什么不同。 一样可能越界！ 到底有什么用？ 越界是程序员的问题； 它只是方便你写一个函数但是可以适用不同的形参，节省了编码的时间。

user: user-3
content: 运行=允许。。。。。。。。

user: user-3
content: 只是允许使用变量定义数组大小，而已，胜于C99之前的只运行编译期常量定义数组，败于动态大小数组

user: user-0
content: 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); //这样调用，数组越界！   }   问题： 1.C99变长数组形参，跟其它数组参数没什么不同。 一样可能越界！ 到底有什么用？

user: user-6
content: 引用书上写的不行吗——http://book.51cto.com/art/201002/182919.htm 娘的，别人肯定不明才问了。照书COPY？！ 神经！

user: user-7
content: 楼上正解。。。

user: user-0
content: int n; scanf("%d",&n); int a[n];   数组a[n]，怎样初始化？