[英]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
相同的值(通過指針),但是x
和y
是不同的變量。
此時,分配給*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.