首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求诸位大牛指点

2012-12-14 
求各位大牛指点#includeiostreamusing namespace stdint main(){int arr[7]memset(arr,0,sizeof(arr))

求各位大牛指点
#include<iostream>

using namespace std;


int main()
{
int arr[7];

memset(arr,0,sizeof(arr));

int arr1[] = {1,2,3,4,5,6,7};

memcpy(arr,arr1,7);

int N;
N = sizeof(arr)/sizeof(int);

cout<<N<<endl;

arr[N] = 2;

cout<<N<<endl;

}

为何这个N的值会变成2呢?输出结果为7,2。求各位路过的教教小弟。
[最优解释]
arr[N] = 2;越界了,产生了不可预料的结果。C语言的数组下标是从0到N-1的,改为arr[N-1] = 2就会正常了。
[其他解释]
说了是不可预料的结果,你仍然越界了啊。
[其他解释]

引用:
说了是不可预料的结果,你仍然越界了啊。


+ +

[其他解释]
引用:
引用:

说了是不可预料的结果,你仍然越界了啊。


+ +
++
[其他解释]
引用:
arr[N] = 2;越界了,产生了不可预料的结果。C语言的数组下标是从0到N-1的,改为arr[N-1] = 2就会正常了。


#include<iostream>

using namespace std;


int main()
{
int arr[9];

memset(arr,0,sizeof(arr));

int arr1[] = {1,2,3,4,5,6,7};

memcpy(arr,arr1,sizeof(arr1));

int N;
N = sizeof(arr)/sizeof(int);

cout<<N<<endl;

arr[N] = 2;

cout<<N<<endl;

}

为何这样输出的就是9,正确的值呢?
[其他解释]
我知道是越界了,可是我想问的是gcc编译器为什么会这样(我是用gcc编译的),有木有哪位大神晓得,个人比较好奇。
[其他解释]
没有看太明白
[其他解释]
引用:
引用:
引用:

说了是不可预料的结果,你仍然越界了啊。


+ +
++


又见非主流

[其他解释]
引用:
引用:

引用:
引用:

说了是不可预料的结果,你仍然越界了啊。


+ +
++


又见非主流
你妹

热点排行