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