C中的指针,简单的疑惑

时间:2013-08-22 17:57:06

标签: c pointers

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

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

6 个答案:

答案 0 :(得分:3)

是的,确实如此。 address_of_x被指定了指向x的指针,但y是完全独立的int变量。您为其分配的值与x(通过指针)相同,但xy是不同的变量。

此时,分配到*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