Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C中的函数初始化数组_C_Arrays_Function_Function Pointers - Fatal编程技术网

使用C中的函数初始化数组

使用C中的函数初始化数组,c,arrays,function,function-pointers,C,Arrays,Function,Function Pointers,我正在做一个课堂作业,我想我会问你们一个问题: 因此,该程序的目的是让用户输入数组的大小,然后用一些数据初始化它。最大尺寸为20。我的问题是,当将大小设置为超过14并尝试初始化时,数组崩溃。例如,如果它将大小设置为20,它接受它,但是当我尝试初始化它时,它崩溃了。我不知道我在做什么。非常感谢你的帮助 多谢各位 埃西 int main() { int sizeOfArray=0;//数组大小 浮点myArray[sizeOfArray]; //我有一段一两行的代码,要求用户输入文件的大小 排列 p

我正在做一个课堂作业,我想我会问你们一个问题:

因此,该程序的目的是让用户输入数组的大小,然后用一些数据初始化它。最大尺寸为20。我的问题是,当将大小设置为超过14并尝试初始化时,数组崩溃。例如,如果它将大小设置为20,它接受它,但是当我尝试初始化它时,它崩溃了。我不知道我在做什么。非常感谢你的帮助

多谢各位

埃西

int main()
{
int sizeOfArray=0;//数组大小
浮点myArray[sizeOfArray];
//我有一段一两行的代码,要求用户输入文件的大小
排列
printf(“让我们初始化一个大小为%d的数组!!\n”,sizeOfArray);
做
{
printf(“输入数组元素%d:”,initCounter+1);
myArray[initCounter]=userInitArray();
initCounter++;
}而(initCounter
我想你忘了在程序开始时添加函数原型(在
main
之前)。
而且

 int sizeOfArray = 0; //size Of Array
 float myArray[sizeOfArray];   
这是错误的。
当您使用可变长度数组(在C99中有效)时,您可以按如下方式进行操作

 int sizeOfArray; //size Of Array
 printf("Let's Initialize an array of size %d!!\n", sizeOfArray);
 float myArray[sizeOfArray];

我想您忘了在程序开始时添加函数原型(在
main
之前)。
而且

 int sizeOfArray = 0; //size Of Array
 float myArray[sizeOfArray];   
这是错误的。
当您使用可变长度数组(在C99中有效)时,您可以按如下方式进行操作

 int sizeOfArray; //size Of Array
 printf("Let's Initialize an array of size %d!!\n", sizeOfArray);
 float myArray[sizeOfArray];
你有一个零号的。您需要首先询问大小,然后分配数组。否则,任何分配给数组元素的尝试都将导致。

您的数组大小为零。您需要首先询问大小,然后分配数组。否则,任何分配给数组元素的尝试都会导致这两行

 int sizeOfArray = 0; //size Of Array
 float myArray[sizeOfArray];
创建一个空数组。因此,您稍后尝试存储在该数组中的任何内容都是访问越界,并调用未定义的行为。您的程序在第14次呼叫时崩溃的事实只是运气。它也可能在第一条线路上崩溃。

这两条线路

 int sizeOfArray = 0; //size Of Array
 float myArray[sizeOfArray];
int sizeOfArray = 0; //size Of Array
float myArray[sizeOfArray];
创建一个空数组。因此,您稍后尝试存储在该数组中的任何内容都是访问越界,并调用未定义的行为。您的程序在第14次呼叫时崩溃的事实只是运气。它也有可能在第一辆车上坠毁

int sizeOfArray = 0; //size Of Array
float myArray[sizeOfArray];
此处创建的数组大小为零。当您稍后增加
sizeOfArray
时,它不会神奇地扩展。您需要首先获取大小变量集(从“一两行代码”用户输入中),然后根据该设置创建数组

您可能还希望对数组大小施加一些合理的上限,以便在尝试创建10亿个条目数组时不会炸毁堆栈:-)

此处创建的数组大小为零。当您稍后增加
sizeOfArray
时,它不会神奇地扩展。您需要首先获取大小变量集(从“一两行代码”用户输入中),然后根据该设置创建数组


您可能还想对数组大小施加一些合理上限,这样当尝试创建一个十亿个条目数组时不会炸毁堆栈:-)

< P>在C或C++中不支持动态数组。 将阵列更改为:

float* myAraray;
//later when you have the size , allocate it:
myArray = (float*)malloc(arrSize * sizeof(float));

< > C或C++中不支持动态数组。 将阵列更改为:

float* myAraray;
//later when you have the size , allocate it:
myArray = (float*)malloc(arrSize * sizeof(float));
你可以做:

int sizeOfArray; //size Of Array
printf("tell me the size of the array");
scanf("%d",&sizeOfArray);
float myArray[sizeOfArray]; // not a good practice 
正确的方法是:

int sizeOfArray; //size Of Array
float *myArray;
printf("tell me the size of the array");
scanf("%d",&sizeOfArray);
myArray=malloc(sizeof(float)*sizeOfArray); 
然后,您可以将指针用作公共数组。 并这样调用:myArray[3]=doSomething()

编辑请注意,由于您已经知道最大大小,因此可以避免执行上面列出的动态分配:

#Define MAXSIZE 20
int main ()
{

     int sizeOfArray; //size Of Array
     float myArray[MAXSIZE];

     printf("tell me the size of the array\n");
     scanf("%d",&sizeOfArray);

     printf("\nLet's Initialize an array of size %d!!\n", sizeOfArray);
     do
     {
           printf("Enter the element at myArray[%d] : ", initCounter+1);
           myArray[initCounter] = userInitArray();
           initCounter++;
      }while (initCounter < sizeOfArray);
}

float userInitArray()
{
      float num;
      scanf("%f", &num);
      return num;
}
#定义最大尺寸20
int main()
{
int sizeOfArray;//数组的大小
浮点myArray[MAXSIZE];
printf(“告诉我数组的大小\n”);
扫描频率(“%d”、&sizeOfArray);
printf(“\n集合初始化大小为%d的数组!!\n”,sizeOfArray);
做
{
printf(“在myArray[%d]:”处输入元素,initCounter+1);
myArray[initCounter]=userInitArray();
initCounter++;
}而(initCounter
最后一个选项可能是您的老师真正想要的。

您可以:

int sizeOfArray; //size Of Array
printf("tell me the size of the array");
scanf("%d",&sizeOfArray);
float myArray[sizeOfArray]; // not a good practice 
正确的方法是:

int sizeOfArray; //size Of Array
float *myArray;
printf("tell me the size of the array");
scanf("%d",&sizeOfArray);
myArray=malloc(sizeof(float)*sizeOfArray); 
然后,您可以将指针用作公共数组。 并这样调用:myArray[3]=doSomething()

编辑请注意,由于您已经知道最大大小,因此可以避免执行上面列出的动态分配:

#Define MAXSIZE 20
int main ()
{

     int sizeOfArray; //size Of Array
     float myArray[MAXSIZE];

     printf("tell me the size of the array\n");
     scanf("%d",&sizeOfArray);

     printf("\nLet's Initialize an array of size %d!!\n", sizeOfArray);
     do
     {
           printf("Enter the element at myArray[%d] : ", initCounter+1);
           myArray[initCounter] = userInitArray();
           initCounter++;
      }while (initCounter < sizeOfArray);
}

float userInitArray()
{
      float num;
      scanf("%f", &num);
      return num;
}
#定义最大尺寸20
int main()
{
int sizeOfArray;//数组的大小
浮点myArray[MAXSIZE];
printf(“告诉我数组的大小\n”);
扫描频率(“%d”、&sizeOfArray);
printf(“\n集合初始化大小为%d的数组!!\n”,sizeOfArray);
做
{
printf(“在myArray[%d]:”处输入元素,initCounter+1);
myArray[initCounter]=userInitArray();
initCounter++;
}而(initCounter

最后一个选项可能是您的老师真正想要的。

在动态分配myArray之前,您需要阅读sizeOfArray,如下所示:

float*myArray=malloc(sizeOfArray*sizeof(float))

这是在堆上分配sizeof(float)*sizeOfArray字节的内存,并将分配的内存地址分配给myArray

对于C语言中的数组,这可能很难理解,它们实际上只是指向内存的指针——在您的程序中,数组myArray是在堆栈上静态分配的,大小为0。您不能向它添加任何元素或分配任何索引,它将不会增长,它的前导0浮动元素