0

我试图了解指针的一些基本原理。有人告诉我,给指针变量赋值会改变实际的变量值。真的吗?我写了一段代码,得到了这个:

#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?那是因为命令的顺序吗?

4

6 回答 6

3

是的。 address_of_x被分配一个指向 的指针x,但y它是一个完全独立的int变量。x您为它分配与(通过指针)相同的值,但xy是不同的变量。

此时,分配 to*address_of_x将改变 的值x,但不会改变y

于 2013-08-22T17:59:11.030 回答
3

y不是指针,是整数。这一行:

int y = *address_of_x;

基本上说“取指向的值address_of_x并将其复制到y.

如果您改为这样做:

int *y = address_of_x;

那么*y将是9.

于 2013-08-22T18:00:33.837 回答
1

是的,这是因为int y = *address_of_x;执行包含的“address_of_x”时命令的顺序,5因此y得到了该值

于 2013-08-22T17:58:43.993 回答
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     |
 +--------------+
于 2013-08-22T18:06:16.250 回答
0

你说的对。你的指针指向xnot y。指针指向x *address_of_x后将赋值给y。所以y会得到 5 的值。

尝试打印 的值x,它将变为 9。因为*address_of_x指向x

printf("value of x = %d\n", x); //output = 9
于 2013-08-22T18:02:17.703 回答
0

陈述

int y = *address_of_x; 

address_of_x在toy和之后 赋值

  *address_of_x = 9;  

正在修改address_of_x指向的变量(在x此处),而不是y.

于 2013-08-22T18:03:05.143 回答