繁体   English   中英

C语言中的指针,简单的疑问

[英]Pointers in C, simple doubts

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

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

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

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

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

int y = *address_of_x;

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

如果您改为这样做:

int *y = address_of_x;

那么*y将是9

是的,这是因为int y = *address_of_x;时命令的顺序int y = *address_of_x; 这执行了包含5的'address_of_x'并且因此y得到了那个值

 +--------------+      
 |   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     |
 +--------------+

你是对的。 您的指针指向x而不是y 在指向x指针之后, *address_of_x将分配给y 因此y的值为5。

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

printf("value of x = %d\n", x); //output = 9

声明

int y = *address_of_x; 

address_of_x值分配给y ,然后在

  *address_of_x = 9;  

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM