考试题 回答详细点 谢谢了
貌似你说的有问题
1 最大下标 = 元素个数 - 1
2 使用注意:
千万小心数组越界(一般是越上界,即你有个int a[5], 你却操作 a[5], a[6]之类),这个是程序绝大多数crash和错误行为的来源;这也是STL引入std::vector, c++0x引入std::array(暂时叫tr1::array)的原因。
3 楼上的说法问题:
3.1 关于上限:在VS2008里面,没有所谓65536的上限,你new int[100000000];//1亿个int都可以
有的上限是这个数组占用的空间不能超过int的最大值0x7fffffff,具体看msdn查C2148
3.2 不明白数组和堆栈有什么直接的联系
2 使用注意:
千万小心数组越界(一般是越上界,即你有个int a[5], 你却操作 a[5], a[6]之类),这个是程序绝大多数crash和错误行为的来源;这也是STL引入std::vector, c++0x引入std::array(暂时叫tr1::array)的原因。
3 楼上的说法问题:
3.1 关于上限:在VS2008里面,没有所谓65536的上限,你new int[100000000];//1亿个int都可以
有的上限是这个数组占用的空间不能超过int的最大值0x7fffffff,具体看msdn查C2148
3.2 不明白数组和堆栈有什么直接的联系
参考资料:自己经验和实力
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-02-20
好像下标值不能超过 65536
和 元素个数没有关系。。
如果 下标值超过 65536 C编译器会提示错误。。
元素个数越多,。
运算越慢。。
他们采用 堆栈。。
先进后出。。
数组 个数 过大 造成 内存 占用多。。
不管什么都想都会有个度。。
谢谢
下标数 = 元素个数
元素个数 的最大下标 = 元素个数-1
下标初始值从0开始。。
也就是 说:a[5];
下标值=5
元素个数=5;
下标值排列:
a[0],a[1],a[2],a[3],a[4];
没错了吧。。
给你个代码 去验证下:
#include <dos.h>
#include <io.h>
int main(void){
char a[65535];
int i=500;
while(i<10000){
sound(i+=500);
delay(500);
}
printf("C 语言 最大下标个数:65535\n 当数组 超出 65535 C 编译器 将 不能编译\n");
system("pause");
return 0;
}
明天在来看看。。
2维 数组的 下标1*下标2 <= 65535
置于 说Vs2008
它的编译器 变了。。
下标大小没有了 限制 只要 你内存 大 就可以。。
和 元素个数没有关系。。
如果 下标值超过 65536 C编译器会提示错误。。
元素个数越多,。
运算越慢。。
他们采用 堆栈。。
先进后出。。
数组 个数 过大 造成 内存 占用多。。
不管什么都想都会有个度。。
谢谢
下标数 = 元素个数
元素个数 的最大下标 = 元素个数-1
下标初始值从0开始。。
也就是 说:a[5];
下标值=5
元素个数=5;
下标值排列:
a[0],a[1],a[2],a[3],a[4];
没错了吧。。
给你个代码 去验证下:
#include <dos.h>
#include <io.h>
int main(void){
char a[65535];
int i=500;
while(i<10000){
sound(i+=500);
delay(500);
}
printf("C 语言 最大下标个数:65535\n 当数组 超出 65535 C 编译器 将 不能编译\n");
system("pause");
return 0;
}
明天在来看看。。
2维 数组的 下标1*下标2 <= 65535
置于 说Vs2008
它的编译器 变了。。
下标大小没有了 限制 只要 你内存 大 就可以。。