C中的指针问题
我有以下问题和答案:C中的指针问题,c,pointers,C,Pointers,我有以下问题和答案: int m = 5; int n = m; int *p1 = &m; int *p2 = &n; m = 10; p2 = p1; *p2 = 7; 问题询问以下各项的价值,答案如下: m=7,n=5,*p1=7,*p2=7 这就是我所尝试的: m是值为5的整数。n是一个int,其值被分配给m的值,即5 以及p1和p2,并初始化为指向m和n的指针 然后我把m的值改为10,所以m是10,n是5 然后当我设置p2=p1时,两个指针都指向m 当我将
int m = 5;
int n = m;
int *p1 = &m;
int *p2 = &n;
m = 10;
p2 = p1;
*p2 = 7;
问题询问以下各项的价值,答案如下:
m=7,n=5,*p1=7,*p2=7
这就是我所尝试的:
m是值为5的整数。n是一个int,其值被分配给m的值,即5
以及p1和p2,并初始化为指向m和n的指针
然后我把m的值改为10,所以m是10,n是5
然后当我设置p2=p1时,两个指针都指向m
当我将p2指向的变量改为7时,n变为7,因此m=10,n=7,p1和p2指向n,其值为7
因此:
m=10,n=5,*p1=7,*p2=7
我做错了什么
编辑:已求解的p1和p2都指向m。因此,*p1和*p2的值是m的值,m是7。如果更改指针指向的变量的值,指针仍将指向它。p1和p2都指向m。因此,*p1和*p2的值是m的值,m是7。如果更改指针指向的变量的值,指针仍将指向它。您说:当我将p2指向的变量更改为7时,n变为7 但你也会说,就在前面:当我设置p2=p1时,两个指针都指向m 我在这里看到了一个矛盾。你说:当我把p2指向的变量改为7时,n变成了7 但你也会说,就在前面:当我设置p2=p1时,两个指针都指向m
我在这里看到一个矛盾。你的错误在你回答的最后一行。 p2指向m的内存地址,而不是n p2=p1表示存储在p2上的内存地址将是存储在p1中的地址,即m的内存地址
永不改变*p2=7;发生在p2=p1之后,当p2是m的内存地址时。您的错误出现在您答案的最后一行。 p2指向m的内存地址,而不是n p2=p1表示存储在p2上的内存地址将是存储在p1中的地址,即m的内存地址 永不改变*p2=7;发生在p2=p1之后,当p2是m的内存地址时。的变量,表示“x是…”,指针表示“…指向x”,当取消引用时表示“(x指向的东西)”。那么操作的顺序可以说是:
- m是5
- n是5
- p1指向m
- p2指向n
- m是10
- p2指向m(因为p2得到p1的值)
- (p2指向[m]的东西)是7
- m是5
- n是5
- p1指向m
- p2指向n
- m是10
- p2指向m(因为p2得到p1的值)
- (p2指向[m]的东西)是7
现在看看你的答案,看看它是否有意义。好的,我希望这能给你一些启示
int *p1 = &m;
int *p2 = &n;
m = 10;
p2 = p1;
*p2 = 7;
int m = 5;
+-----+
m | 5 |
+-----+
int n = m; // copy value, m and n are in two diff places
+-----+
n | 5 |
+-----+
int *p1 = &m; // set pointer to m
+-----+
p1 -> m | 5 |
+-----+
int *p2 = &n; // set pointer to n
+-----+
p1 -> m | 5 |
+-----+
+-----+
p2 -> n | 5 |
+-----+
m = 10
+-----+
p1 -> m | 10 |
+-----+
+-----+
p2 -> n | 5 |
+-----+
p2 = p1
+-----+
p1 -> m | 10 |
+-----+
/
p2 --+
*p2 = 7
+-----+
p1 -> m | 7 |
+-----+
/
p2 --+
好吧,我希望这能给我们一些启示
int *p1 = &m;
int *p2 = &n;
m = 10;
p2 = p1;
*p2 = 7;
int m = 5;
+-----+
m | 5 |
+-----+
int n = m; // copy value, m and n are in two diff places
+-----+
n | 5 |
+-----+
int *p1 = &m; // set pointer to m
+-----+
p1 -> m | 5 |
+-----+
int *p2 = &n; // set pointer to n
+-----+
p1 -> m | 5 |
+-----+
+-----+
p2 -> n | 5 |
+-----+
m = 10
+-----+
p1 -> m | 10 |
+-----+
+-----+
p2 -> n | 5 |
+-----+
p2 = p1
+-----+
p1 -> m | 10 |
+-----+
/
p2 --+
*p2 = 7
+-----+
p1 -> m | 7 |
+-----+
/
p2 --+
嗯,好吧,那m呢?它被改成了10,为什么变成了7?@TeoZec:你不是说m而不是n吗?基本上,m和n都没有正确的值。@mouviciel是的,当然。我打错了。我真的很抱歉。我会改正的it@user3717271对不起,我的回答有错误。现在试试看。嗯,好吧,m呢?它被改成了10,为什么变成了7?@TeoZec:你不是说m而不是n吗?基本上,m和n都没有正确的值。@mouviciel是的,当然。我打错了。我真的很抱歉。我会改正的it@user3717271对不起,我的回答有错误。现在就看吧。我刚编辑完这篇文章就发布了。我想我已经修好了。很抱歉。发布这篇文章时我正在编辑它。我想我已经修好了。很抱歉。好吧,我觉得现在有道理了。当我设置p2=p1时,两个指针都指向m,因此当我将p2指向的变量更改为7时,m变为7,而n不受影响,因此m=7,n=5,p1和p2指向n,其值为7。谢谢是的,那很好。请在选票底部的标记上把答案设置为正确。好的,我认为现在有意义了。当我设置p2=p1时,两个指针都指向m,因此当我将p2指向的变量更改为7时,m变为7,而n不受影响,因此m=7,n=5,p1和p2指向n,其值为7。谢谢是的,那很好。请在选票底部的标记上将答案设置为正确。