gpt4 book ai didi

c - c中可变大小对象的初始化问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:20 24 4
gpt4 key购买 nike

像这样初始化可变大小的对象有什么问题?

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

int fun(int n,int *dp)
{
dp[1]=0;

int i;
for(i=2;i<=n;i++)
{
dp[i]=1+dp[i-1];
if(i%2==0)dp[i]=min(dp[i],1+dp[i/2]);
if(i%3==0)dp[i]=min(dp[i],1+dp[i/3]);
}
return dp[n];
}


int main()
{
int arr[4]={2,4,1,7};
int i;
for(i=0;i<4;i++)
{
int memo[arr[i]+1]={-1};
//memset(memo,-1,sizeof(memo));
int result=fun(arr[i],memo);
printf("%d\t",result);
}
return 0;
}

错误是:variable-sized objectmemo' may not be initialized`

最初我尝试使用这种初始化方法,但后来使用了memset()。有人可以帮我吗..谢谢..

最佳答案

这不会编译:

int memo[arr[i]+1]={-1};

变长数组中不能有初始化列表。您必须手动初始化它:

    int memo[arr[i]+1];
for (int j = 0; j < arr[i]+1; j++)
memo[j] = -1;
int result=fun(arr[i],memo);
printf("%d\t",result);

至于memset 解决方案,它应该 工作,假设使用 2 补码 - 这是因为 memset 按字节工作,所以它实际上是将字节 -1 多次写入 memo[i] 的每个字节(特别是,它将 -1 写入每个sizeof(int) 个字节的 memo[i])。但由于 -1 通常由填充 1 的位模式表示,因此它仍然可以工作。如果 -1 由不同的位模式表示,那么您可能会感到惊讶。就个人而言,我会选择手动初始化。

关于c - c中可变大小对象的初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com