#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int a=5;
int *p,*q;
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
该程序挂起。这似乎是问题在第6行。为什么呢?将一个指针复制到C++中的其他指针
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int a=5;
int *p,*q;
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
该程序挂起。这似乎是问题在第6行。为什么呢?将一个指针复制到C++中的其他指针
是的,那些悬挂指针,你遇到未定义的行为。
不能解引用指向内存的指针,你没有自己:
int* p;
*p; //illegal
int* x = NULL;
*x; //illegal
int* y = new int;
*y; //OK!
正确的版本是:
int main(int argc, char **argv) {
int a=5;
int *p = new int;
int *q = new int;
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
delete p;
delete q;
return 0;
}
或
int main(int argc, char **argv) {
int a=5;
int *p;
int *q;
p = &a;
q = p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
的更正确的版本:
int main(int argc, char **argv) {
int a=5;
int p,q;
p = a;
q = p; //line 6
cout<<p<<p<<q<<q;
return 0;
}
无指针:)
p地址a,那么q拥有一个地址? – 2012-07-27 17:21:01
在您更正的第一个版本中 – 2012-07-27 17:21:59
@ user1139048 p不包含a的地址。在它指向的地址中(分配给新的),它复制a的值。 – 2012-07-27 17:24:48
第5行也有问题。你已经声明了指针,但是你没有把它们指向任何东西,这不会自动发生。像你一样,取消引用未初始化的指针可能会导致程序崩溃。
这样的事情会更好。
int main(int argc, char **argv) {
int a=5;
int b, c;
int *p,*q;
p = &b; // make p point at b
q = &c; // make q point at c
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
你的代码假定有存储在P时 没有的东西。
这是你正在尝试做什么?
int a=5;
int *p,*q;
p = &a;
q = p; //line 6
cout<<(*p)<<p<<(*q)<<q;
在上面的代码中,在所述程序中,p和q指向同一个地址的末端 - 的整数被存储在何处的地址
实际上我想通过做* * =知道q所持有的地址是什么? – 2012-07-27 17:24:15
q可以保存你想要的任何地址 - 在上面的情况下,q将保持与p的值相同的地址 – 2012-07-27 17:27:45
,但是当我打印p和q时,两者都不相同,这意味着它们不具有相同的地址。 – 2012-07-27 17:29:59
两个指针可以使用另一个变量作为被复制如下:
#include<iostream>
using namespace std;
int main()
{
int *p,*q;
int a = 5;
p = &a;
q = &(*p);
a = 10;
std::cout<<*p<<std::endl;
std::cout<<*q<<std::endl;
}
但是在上面这个例子中,两个指针指向的地址是不一样的。 这将使这两个指针来将使用引用
通过变量 在C++中另一个很好的方式确定要做到这一点int a = 5;
int& p = a;
int& q = p;
std::cout<<p<<std::endl;
std::cout<<q<<std::endl;
std::cout<<&p<<std::endl;
std::cout<<&q<<std::endl;
结果:
0xbf9e7498
0xbf9e7498
你没有为int分配内存。它在'* p = a;'上变得不可预测。 – 2012-07-27 17:09:22
'#include'= C++。您应该避免在C++中使用原始指针... –
2012-07-27 17:13:03
C和C++是两种不同的语言,并且没有称为“C/C++”的语言。你的代码显然是C++。 – 2012-07-27 17:14:55