用数组声明,C

1 c arrays algorithm

我正在研究C中的数组,我正在尝试使用冒泡算法.

我做(在一个主要功能):

int main{
srand(time(NULL)); //Randomize
int SIZE = (rand() % 20) + 1;
int number[ SIZE ] = { 0 };
...
}
Run Code Online (Sandbox Code Playgroud)

但编译说:variable-sized object may not be initialized.

我需要声明一个数组来插入N个随机生成的数字,然后通过冒泡排序算法对它们进行排序.

我使用"stdio.h"和"time.h".

为什么,如果我尝试将所有数字的数组初始化为0,编译器会出错?如果我擦除= { 0 };,编译器不会出错,但程序运行不好

这是我的代码:http: //pastebin.com/uBaYWXbR

谢谢大家!:)对不起,如果我的英语不好.

use*_*031 6

number编译时不知道大小,因此编译器无法为其生成初始化程序.您可以使用自己初始化它memset,或者您可以使数组的大小为编译时常量.

memset(number, 0, SIZE*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

当您完全省略初始化时,您的程序可能会失败,因为它假设数组已初始化为0,而它根本没有初始化并包含任意值.


Vla*_*cow 5

错误消息足够清楚:您可能无法初始化VLA.所以简单地替换这个陈述

int number[ SIZE ] = { 0 };
Run Code Online (Sandbox Code Playgroud)

对于

int number[ SIZE ];
Run Code Online (Sandbox Code Playgroud)

如果您希望数组的所有元素都等于0,那么您可以使用标memset头中声明的标准C函数<string.h>.例如

int number[ SIZE ];
memset( number, 0, sizeof( number ) );
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子

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

int main(void) 
{
    srand( ( unsigned int )time( NULL ) );
    int SIZE = rand() % 20 + 1;

    int a[SIZE];

    memset( a, 0, sizeof( a ) );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

至于你的程序,那么即使是第一个循环也是无效的

for(i=0; i <= SIZE; i++);
{
    number[ i ] = (rand() % 100) + 1;
}
Run Code Online (Sandbox Code Playgroud)

首先,你必须删除for语句末尾的分号,循环的条件应该是

i < SIZE
Run Code Online (Sandbox Code Playgroud)

因此它看起来像

for ( i = 0; i < SIZE; i++ )
{
    number[ i ] = rand() % 100 + 1;
}
Run Code Online (Sandbox Code Playgroud)

另外,我还没有看到你的程序中有泡泡排序的地方.:)