1、下面的程序运行时哪一行会出现错误:struct S
{
int i;
int * p;
};
int main()
{
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;
}
{
int i;
int * p;
};
int main()
{
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;
}
解决方案 »
- CComboBox的问题
- 如何对多幅图像进行相关操作???急急!
- 如何在一幅图像上加注文字后,保存图像及所加文字——高分求救!!!
- 这样为什么老是出错!!!!!!!!
- ActiveX编译问题
- 有关从DLL到出类的问题?诚恳指教!!!万分感谢!!!
- VC6.0与Matlab混合编程 (DLL方式) error C2061: syntax error : identifier 'REFCLSID'
- 线程问题进度条跑的时候出问题
- trace 输出的东西在那里可以看到
- 请教高手,怎样探测SQL服务器的数据库是否存在?
- smtp的MAIL FROM和RCPT TO 和信体内的From ,To地址有什么区别啊?
- 请教专家、高手:我在服务器上建立数据库的ODBC,怎样在客户端连接并操作数据库?
蒙的 :)
s.p[0] = 2;//等于把内存0x00000001赋值2,这里错
初始化p,再正常不过了
{
int i;
int * p;
};
int main()
{
S s;
int * p = &s.i;
p[0] = 4; //==> s.i = 4;
p[1] = 3; //p[1],相当于*(p+1),==>s.p = 3;
s.p = p; //s.p指向了s.i
s.p[1] = 1; //s.p = 1,此时该指针变为非法
s.p[0] = 2; //p已非法,出错!
return 0;
}
s.p[1] = 1;//???
s.p[0] = 2;//出错...
s.p[1] = 1;
s.p[0] = 2;两行都有问题。
p[1] = 3;
s.p[1] = 1;
s.p[0] = 2;
这三句有错,p只是一指针,没有实际的地址;给一个没有地址的变量赋值,一定会出错的!
给指针赋任意值,没有错,比如int *p = NULL;
给一个地址赋值,则要求这个地址存在且可写。比如*NULL = 0就错了。
Compiling...
TEST22.CPP
Linking...TEST22.exe - 0 error(s), 0 warning(s)
老实说这道题出的没有什么意义
应该这样:struct S s;
s.p[1]=1;这句话修改了s.i的下一个地址即s.p的值
使得s.p指向0x00000001
s.p[0]=2;修改0x0000001地址处的值,错误
因为s.p[1] = 1;这句已经给p的分配了p的地址了,包括p[0]。p[0]不能再赋值
但是把这两句换过来就不会了
s.p[0] = 2;
s.p[1] = 1;
这样就不会了出错了
s.p[1] = 1;
int * p = &s.i;
p[1] = 3; //p[1],相当于*(p+1),==>s.p = 3;
p[0] = 4; //==> s.i = 4;
s.p = p; //s.p指向了s.i
s.p[1] = 1; //s.p = 1,此时该指针变为非法
s.p[0] = 2; //p已非法,出错!-----------------------严重同意。赫赫
{
int a;
int * p ;
p=&a;
int *q=&a;
q[1]=3;
}
这个那,为什么运行时会报错?
http://blog.csdn.net/blankman/archive/2004/11/14/WE_MS_20041113.aspx
答案是确定的,但解释则不一定了。