当前位置: 代码迷 >> C语言 >> 变长数组怎样操作?
  详细解决方案

变长数组怎样操作?

热度:237   发布时间:2006-10-15 15:55:23.0
以下是引用BlueDreame在2006-10-15 10:20:56的发言:

typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

这是微软对BITMAP相关的一个定义,至少VC 6中有,VC6不支持C99.////????可能么?


----------------解决方案--------------------------------------------------------

void fun(int i)
{
int b[i];
for(int a=0;a<i;a++)
{
///b[a]=a;
//......
}
}

int main()
{
for(int 90=0;a<100;a++)fun(a);

return 0;
}

如果vc编译运行无误,则支持C99的变长数组


----------------解决方案--------------------------------------------------------
6~8不应该属于变长数组的范畴吧?
----------------解决方案--------------------------------------------------------

6~8不应该属于变长数组的范畴吧?

老K,那个结构体中的数组就是属于变长数组。

你举的上面那个例子也是属于VLA。

很多变长数组的形式就是利用象楼主那个结构体一样的形式,结构体可以存储更多的内容,比如说一些网络数据或者信号

传送,不可能用你那个例子(只用数组)那样吧?肯定要附加一些其他信息,所以可以用结构体来传送。

另外,VC应该支持C99的。因为,在楼主那个结构体中,如果是C99编译器的话,

RGBQUAD bmiColors[1]; //这里可以写成RGBQUAD bmiColors[ ]; (里面没有写1)



----------------解决方案--------------------------------------------------------

形如t = (struct _t *)malloc(sizeof (struct _t) + strlen(str) + 1);要程序员动用malloc,new之类分配内存的,就不该属于变长数组。变长数组应该是指使用变量来定义数组维数的数组

个人愚见,如有不妥请见谅


----------------解决方案--------------------------------------------------------
至于结构体么,也是可以用的
#include <stdio.h>
void fun(int s)
{

struct Test
{
int a[s];
int b;
}test;

for(int i=0;i<s;i++)
{
test.a[i]=i;
}

for(int i=0;i<s;i++)
{
printf(" %d ",test.a[i]);
}
printf("\n");

}
int main()
{
for(int a=10;a<20;a++)
fun(a);

return 0;
}
----------------解决方案--------------------------------------------------------
具体求长度用sizeof()
----------------解决方案--------------------------------------------------------
注意我只是在讨论那种形式才叫变长数组,而不是其它什么问题 :)
----------------解决方案--------------------------------------------------------

随便找个变长数组应用的例子贴一下吧:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct _t {
size_t size;
char s[]; //这里它其实就是先声明一个数组但没有声明长度,然后在下面malloc那句获得数组长度
};

int main()
{
struct _t *t;

/*就是这句,后面的10 * sizeof (char))就是获得数组长度*/
t = (struct _t *)malloc(sizeof (struct _t) + 10 * sizeof (char));
if (!t) {
fputs("Out of memory.", stderr);
return 1;
}
t->size = 10;

strncpy(t->s, "123456789", t->size - 1);
t->s[t->size-1] = '\0';

puts(t->s);

free(t);

return 0;
}

//本身这样的用法就属于变长数组的范畴。我记得这种用法也经常叫做“结构灵活数组成员”。


----------------解决方案--------------------------------------------------------
以下是引用baidu在2006-10-15 16:55:13的发言:
注意我只是在讨论那种形式才叫变长数组,而不是其它什么问题 :)

老K,咱们好象吧话题给扯到“什么样的形式才是变长数组”啦。


----------------解决方案--------------------------------------------------------
  相关解决方案