关于VC中数组初始化的问题
我使用VC++6.0,初始化数组时数组的长度和内容都要由外部输入,如下面一个例子:inti;printf("Inputthesizeandthenumber:\n");s...
我使用VC++6.0,初始化数组时数组的长度和内容都要由外部输入,如下面一个例子:
int i;
printf( "Input the size and the number :\n" );
scanf( "%d", &n );
int A[ n ];
for ( i = 0; i < n; i++ ) {
scanf( "%d", &A[ i ] );
}
但在调试时却提示多个error和warning;
当我用DEV-CPP调试却可以.
请问高手如何在VC中解决这个问题,小弟初学,术语可能有用不对的地方,请意会. 展开
int i;
printf( "Input the size and the number :\n" );
scanf( "%d", &n );
int A[ n ];
for ( i = 0; i < n; i++ ) {
scanf( "%d", &A[ i ] );
}
但在调试时却提示多个error和warning;
当我用DEV-CPP调试却可以.
请问高手如何在VC中解决这个问题,小弟初学,术语可能有用不对的地方,请意会. 展开
5个回答
展开全部
int i;
printf( "Input the size and the number :\n" );
scanf( "%d", &n );
int A[ n ];
这样肯定是不行的,只能在一起定义,中间不能有其他语句。n应该是常量。
如果你要在不知道数组元素个数的情况下定义,那只能动态定义了。
比如:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i, *p,size;
printf("请输入数组中的元素个数:");
scanf("%d",&size);
p=(int*)malloc(size*sizeof(int));
printf("请输入数组中的元素:");
for(i=0;i<size;i++)
scanf("%d",p+i);
printf("数组元素输出:\n");
for(i=0;i<size;i++)
printf("%d",*(p+i));
free(p);
}
希望对你有帮助。
printf( "Input the size and the number :\n" );
scanf( "%d", &n );
int A[ n ];
这样肯定是不行的,只能在一起定义,中间不能有其他语句。n应该是常量。
如果你要在不知道数组元素个数的情况下定义,那只能动态定义了。
比如:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i, *p,size;
printf("请输入数组中的元素个数:");
scanf("%d",&size);
p=(int*)malloc(size*sizeof(int));
printf("请输入数组中的元素:");
for(i=0;i<size;i++)
scanf("%d",p+i);
printf("数组元素输出:\n");
for(i=0;i<size;i++)
printf("%d",*(p+i));
free(p);
}
希望对你有帮助。
展开全部
是这样的。
在vc6.0中 .C文件是按照C90的标准编译的,而C90中数组被定义为静态,也就是说需要在编译阶段给出确切的尺寸,从而在内存中划分大小。
所以你这种在运行后给出输入数组尺寸的做法无法通过。
而在最新的C99标准中支持了这种运行阶段给出大小的“动态”数组(实现原理比较靠近底层,请参考汇编理解),所以一般新的GCC编译器都能支持这种编译方法。
但VC6.0是不支持的,估计2005年以后微软推出的VC系列编译器VC7.0VC8.0就可能支持了。我没用过……
而你所用的DEV-CPP,实际的编译应该是由GCC完成的,GCC支持C99标准,从而支持这种“动态数组”。所以可以通过编译。
总结一下就是,你的代码中的运行后给出数组大小的做法:
C90 C++98 都不支持(所以在VC6.0无法通过)
C99 G++ 都支持(所以在DEV-CPP中可以通过)
在vc6.0中 .C文件是按照C90的标准编译的,而C90中数组被定义为静态,也就是说需要在编译阶段给出确切的尺寸,从而在内存中划分大小。
所以你这种在运行后给出输入数组尺寸的做法无法通过。
而在最新的C99标准中支持了这种运行阶段给出大小的“动态”数组(实现原理比较靠近底层,请参考汇编理解),所以一般新的GCC编译器都能支持这种编译方法。
但VC6.0是不支持的,估计2005年以后微软推出的VC系列编译器VC7.0VC8.0就可能支持了。我没用过……
而你所用的DEV-CPP,实际的编译应该是由GCC完成的,GCC支持C99标准,从而支持这种“动态数组”。所以可以通过编译。
总结一下就是,你的代码中的运行后给出数组大小的做法:
C90 C++98 都不支持(所以在VC6.0无法通过)
C99 G++ 都支持(所以在DEV-CPP中可以通过)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组赋值的时候,有2种,1种是初始化的时候直接赋值,1种是用FOR循环1个1个赋值
你在构造函数中
用int
pos[3]={0,0,0};进行初始化
这实际上是定义了一个局部变量pos[3],并且内容初始化为0而已,并不是对其成员引用。
你在构造函数中
用int
pos[3]={0,0,0};进行初始化
这实际上是定义了一个局部变量pos[3],并且内容初始化为0而已,并不是对其成员引用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组不能是变量,只能是常量
即数组不能 跟你你的输入来决定初始化多少,但是可以使用函数来进行内存申请,放到栈里面
即数组不能 跟你你的输入来决定初始化多少,但是可以使用函数来进行内存申请,放到栈里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看代码是n是变量,不能作栈上数组的初始化大小。
int A[n]这里的n只能是常量。
要么使用 int *A = new int[n];
要么使用 std::vector<int> A(n);
int A[n]这里的n只能是常量。
要么使用 int *A = new int[n];
要么使用 std::vector<int> A(n);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询