繁体   English   中英

Netbeans C / C ++编译器数组从1而不是0开始

[英]Netbeans c/c++ compiler array start at 1 instead of 0

这是一个简化的代码来说明问题:

int *nums[10];

*nums[0] = 5;

cout << *nums[0] << endl;

该代码已编译,但是在执行时失败。 所以我尝试了这个:

int *nums[10];

*nums[1] = 5;

cout << *nums[1] << endl;

并可以打印出来。 我发现数组从* nums [1]到* nums [10]开始,而不是通常的* nums [0]到* nums [10]。 我已经与使用Netbeans C / C ++编译器的其他人进行了核对,他们的工作如常。 我认为这是在特定编译器中更改的某些首选项。 如何更改它,使其按应有的方式工作?

数组基于0。 您正在遇到未定义的行为。

int *nums[10];

创建一个由10个未初始化的int指针组成的数组。

*nums[0] = 5;

取消引用未初始化的指针。 什么都可能发生。 为使它表现出预期的效果,请在访问指针之前分配内存:

for ( int i = 0 ; i < 10 ; i++ )
   nums[i] = new int;

然后将其删除:

for ( int i = 0 ; i < 10 ; i++ )
   delete nums[i];

例如,我在MSVS中收到警告:

警告C4700:使用了未初始化的局部变量'nums'

以及崩溃:)。

在C / C ++中,数组始终为0索引。

我假设您想创建一个整数数组。 如果要创建一个指向整数的指针数组,请查看Luchian的答案。

您声明了一个由10个指向整数值的指针组成的数组。 您没有为实际值分配内存。 这就是为什么您会得到一个错误。

您需要为整数分配内存。 为此,您有两种方法:

int nums[10];
nums[0] = 5;
cout << nums[0] << endl;

要么

int* nums = new int[10];
nums[0] = 5;
cout << nums[0] << endl;
delete[] nums; // don't forget to delete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM