标题:变长数组怎样操作?
只看楼主
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
以下是引用BlueDreame在2006-10-15 10:20:56的发言:

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

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


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 15:55
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 

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的变长数组


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 16:00
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
6~8不应该属于变长数组的范畴吧?

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 16:03
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 

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

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

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

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

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

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

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



我的原则很简单:不做不喜欢的事!
2006-10-15 16:19
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 

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

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


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 16:39
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
至于结构体么,也是可以用的
#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;
}

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 16:52
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
具体求长度用sizeof()

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-10-15 16:54
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
注意我只是在讨论那种形式才叫变长数组,而不是其它什么问题 :)

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-10-15 16:55
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 

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

#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;
}

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


我的原则很简单:不做不喜欢的事!
2006-10-15 17:06
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
得分:0 
以下是引用baidu在2006-10-15 16:55:13的发言:
注意我只是在讨论那种形式才叫变长数组,而不是其它什么问题 :)

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


我的原则很简单:不做不喜欢的事!
2006-10-15 17:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-96417-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080431 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved