C++ 将一个指针复制到C+中的另一个指针+; #包括 使用名称空间std; int main(int argc,字符**argv){ INTA=5; int*p,*q; *p=a; *q=*p;//第6行 cout

C++ 将一个指针复制到C+中的另一个指针+; #包括 使用名称空间std; int main(int argc,字符**argv){ INTA=5; int*p,*q; *p=a; *q=*p;//第6行 cout,c++,pointers,C++,Pointers,是的,这些都是悬而未决的指针,您正在遇到未定义的行为 无法取消引用指向您不拥有的内存的指针: #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; re

是的,这些都是悬而未决的指针,您正在遇到未定义的行为

无法取消引用指向您不拥有的内存的指针:

#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;
}
正确的版本是:

int* p;
*p; //illegal

int* x = NULL;
*x; //illegal

int* y = new int;
*y; //OK!
int main(int argc,char**argv){
INTA=5;
int*p=新的int;
int*q=新的int;
*p=a;
*q=*p;//第6行

cout第5行中也有一个问题。您声明了指针,但没有让它们指向任何东西,这不会自动发生。而且取消对未初始化指针的引用,就像您这样做,很可能会使程序崩溃

这样比较好

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;
}
int main(int argc,char**argv){
INTA=5;
int b,c;
int*p,*q;
p=&b;//使p指向b
q=&c;//将q点指向c
*p=a;
*q=*p;//第6行

cout您拥有的代码假设当 没有

这就是你想做的吗

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;
}
inta=5;
int*p,*q;
p=&a;
q=p;//第6行

cout可以使用另一个变量复制两个指针,如下所示

int a=5;
int *p,*q;

p = &a;
q = p;  //line 6

cout<<(*p)<<p<<(*q)<<q;
#包括
使用名称空间std;
int main()
{
int*p,*q;
INTA=5;
p=&a;
q=&(*p);
a=10;

C++:C++在C++中不使用原始指针,C和C++是两种不同的语言,没有语言称为“C/C++”。你的代码很明显是C++的。@ MihaiTodor有很多情况下“原始”指针是正确的,很多应用程序都是不正确的。这个人显然是在尝试学习正确的做事方法。@苏珊我倾向于听Marshall Cline:如果你真的想了解原始指针,也许H。E/她应该坚持简单的C构造。否则,C++中的好方法会导致大量的坏例子。p持有A的地址,Q是否持有一个?@ UsR1139048 P的地址,它不包含地址A中的地址(用新的分配)。,它复制了a的值。如果我做*p=a,它不是保存了a的地址吗?所以我通过做*q=*p来问,q???@user1139048的地址是什么?第一个问题,不是。它保存了地址
p
指向的
a
的值(这是
new
返回的地址).second-q不更改其地址,但更改其值。
*q
是值,
q
是地址。如果您更改了
q=&a
,则它将具有
a
的地址。我更正了看起来是复制粘贴错误的内容。您正在删除a的地址(从堆栈中)在你的第二个正确的例子中,实际上我想通过做*p=*q来知道q所持有的地址是什么?q可以持有你想要的任何地址-在上面的例子中,q将持有与p相同的地址,但当我打印p和q时,两者都不同,这意味着它们不持有相同的地址。
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;
}
int a=5;
int *p,*q;

p = &a;
q = p;  //line 6

cout<<(*p)<<p<<(*q)<<q;
#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;
}
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;