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

一路c++笔试题求解

2013-06-26 
一道c++笔试题求解struct S{int iint *p}int main(){struct S sint *p&s.ip[0]4p[1]3s.pps.p[

一道c++笔试题求解


struct S
{
int i;
int *p;
};


int main()
{

struct S s;
int *p=&s.i;
p[0]=4;
p[1]=3;
s.p=p;
s.p[1]=1;
s.p[0]=2;

return 0;


}


希望哪位给我解释下这个错误,并说出里面原因,具体点 C++ C 笔试
[解决办法]
指针p指向的是int,不是int数组, p[0]=4; p[1]=3;越界了。后面的s.p同样如此。
[解决办法]

struct S
{
int i;
int *p;
};

int main()
{
struct S s;
int *p=&s.i;
p[0]=4;//s.i = 4
p[1]=3;//s.p = 0x3
s.p=p;//s.p = &s.i 
s.p[1]=1;//s.p = 0x1
s.p[0]=2;//把地址为0x1的内存赋值为2。。非法访问。。出错。。

return 0;
}

[解决办法]
楼上回答正确
[解决办法]
引用:

struct S
{
int i;
int *p;
};

int main()
{
struct S s;
int *p=&s.i;
p[0]=4;//s.i = 4
p[1]=3;//s.p = 0x3
s.p=p;//s.p = &s.i 
s.p[1]=1;//s.p = 0x1
s.p[0]=2;//把地址为0x1的内存赋值为2。。非法访问。。出错。。

return 0;
}
还是没看到懂
[解决办法]
引用:
Quote: 引用:

写这样的代码太危险啦。
出这样的考题也没意思。

Quote: 引用:

Quote: 引用:


struct S
{
int i;
int *p;
};

int main()
{
struct S s;
int *p=&s.i;
p[0]=4;//s.i = 4
p[1]=3;//s.p = 0x3
s.p=p;//s.p = &s.i 
s.p[1]=1;//s.p = 0x1
s.p[0]=2;//把地址为0x1的内存赋值为2。。非法访问。。出错。。

return 0;
}
还是没看到懂

这位注释的够清楚了,你还没看懂就是对指针不了解。

话说回来,出这样的考题绝对脑残,实际应用中谁写这么危险的代码啊。


还是不能理解,这s.p不是指向p的地址吗,怎么会变了呢,在编译器我也看过了,还是不明白,请指教,谢谢


s.p这个指针和外面p指针指向同一个地址,而这个时候p的指针指向s.i的地址
s.p[1]=1;// s.p[1]是什么呢,s.p[1]是s.i(这个时候s.p[0]和s.i是同一个地址)后面4个字节的地址,也就是s.p本身。把p的值赋予1,则*p是对地址0x00000001的内存操作。(这么做是很危险的,0x0001的地址是空指针赋值区)
s.p[0]=2;//也就是对刚才地址0x00000001进行赋值,结果相当于对NULL指针赋值2。非法访问。

热点排行