我正在尝试理解指针的一些基本原理。有人告诉我,为指针变量赋值会改变实际的变量值。真的吗?我写了一段代码并得到了这个:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x=5;
int *address_of_x = &x;
int y = *address_of_x;
*address_of_x = 9;
printf("The value of x is: %d\n", x);
printf("The X is at: %p\n", &address_of_x);
printf("value of y = %d\n", y);
return 0;
}
并获得如下输出:
The value of x is: 9
The X is at: 0028FF04
value of y = 5
为什么“y”的值保持为5?那是因为命令的排序吗?
答案 0 :(得分:3)
是的,确实如此。 address_of_x
被指定了指向x
的指针,但y
是完全独立的int
变量。您为其分配的值与x
(通过指针)相同,但x
和y
是不同的变量。
此时,分配到*address_of_x
会更改x
的值,但不会更改y
的值。
答案 1 :(得分:3)
y
不是指针,它是一个整数。这一行:
int y = *address_of_x;
基本上是说“取address_of_x
指向的值并将其复制到y
。
如果你这样做了:
int *y = address_of_x;
然后*y
将为9
。
答案 2 :(得分:1)
是的,这是因为命令的排序
当int y = *address_of_x;
执行时,'address_of_x'包含5
,因此y
获得该值
答案 3 :(得分:1)
+--------------+
| 5 |
|*address_of_x |
+--------------+
^
| y=*address_of_x =5
|
+--------------+
| address_of_x |
| 0028FF04 |
+--------------+
下次
*address_of_x = 9
+--------------+
| 9 |
|*address_of_x |
+--------------+
^
| but y still 5
|
+--------------+
| address_of_x |
| 0028FF04 |
+--------------+
答案 4 :(得分:0)
你是对的。您的指针指向x
而不是y
。指向x
*address_of_x
的指针将分配给y
。因此y
将获得5的值。
尝试打印x
的值,它会更改为9.因为*address_of_x
指向x
。
printf("value of x = %d\n", x); //output = 9
答案 5 :(得分:0)
声明
int y = *address_of_x;
将address_of_x
的值分配给y
,然后分配到
*address_of_x = 9;
正在修改address_of_x
指向的变量(此处为x
),而不是y
。