typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
这是微软对BITMAP相关的一个定义,至少VC 6中有,VC6不支持C99.////????可能么?
偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
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的变长数组
老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>
#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;
}
//本身这样的用法就属于变长数组的范畴。我记得这种用法也经常叫做“结构灵活数组成员”。
老K,咱们好象吧话题给扯到“什么样的形式才是变长数组”啦。