该代码从字面上从用户获得输入和分配是数组,它在在线gdb和极客健忘问题提交中工作?
int n;
int [n];这是可行的!,而在我搜索过的地方,n的内部数组应该是一个常量。
这是我朋友写的问题和代码的链接。
代码
#include <stdio.h>
int main()
{
int t,n;
int rear;
int front;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int a[n],s[n];
int temp;
for(int i=0;i<n;i++)
a[i]=i+1;
front=0;
rear=n-1;
//rotation
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
temp=a[front];
if(front == rear)
{
front = -1;
rear = -1;
}
else
{
front = (front+1) % n;
}
//dequeue
if(front == -1)
{
front = 0;
}
rear = (rear + 1) % n;
a[rear] = temp;
//enqueue
}
temp=a[front];
if(front == rear)
{
front = -1;
rear = -1;
}
else
{
front = (front+1) % n;
}
s[temp-1]=i;
//dequeue
}
for(int i=0;i<n;i++)
printf("%d\t",s[i]);
printf("\n");
}
return 0;
}发布于 2020-10-23 07:07:57
这是一个VLA,它是在C99中添加的,但是C11继续,它是一个可选的特性。
引用标准:
如果不存在大小,则数组类型是不完整类型。如果大小不是表达式,而是
*,则数组类型是未指定大小的可变长度数组类型,只能在具有函数原型作用域的声明或类型名称中使用;然而,这些数组是完整的类型。如果大小是整数常量表达式,且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型;否则,类型是可变长度数组类型。(可变长度数组是实现不需要支持的条件特性;请参见6.10.8.3)。
https://stackoverflow.com/questions/64495406
复制相似问题