簡體   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