2013-08-22 40 views
0

我想了解一些指針的基本原理。有人告訴我,賦值給指針變量會改變實際的變量值。真的嗎?我寫了一段代碼,並得到這個:C中的指針,簡單的疑惑

#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?那是因爲命令的順序嗎?

+0

指針包含一個地址下一次。地址指向房屋。您可以複製地址多個地點,並且不會移動房子,並且如果您擦除不破壞房屋的地址。 –

+0

(但是當你使用'*'(在參考中,而不是聲明中)調用木匠來複制房屋或修改房屋看起來像另一個房子。) –

+1

在大多數講英語的世界裏,「懷疑」不是「問題」的同義詞; 「懷疑」一詞意味着不相信。 –

回答

3

y不是一個指針,它是一個整數。這條線:

int y = *address_of_x; 

基本上說「採取值由address_of_x指出並將其複製到y

如果你已經不是做到了這一點:

int *y = address_of_x; 

然後*y9

1

是的,這是因爲命令 的排序時int y = *address_of_x;這個執行的「address_of_x」包含5因此y得到了價值

3

是的,它是。 address_of_x被分配了指向x的指針,但是y是完全獨立的int變量。你分配給它的值相同x(通過指針),但xy是不同的變量。

在這一點上,分配到*address_of_x將更改值x,但不是y

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 
0

聲明

int y = *address_of_x; 

address_of_xy然後經過

*address_of_x = 9; 

分配值被修改的變量,其address_of_x點(這是x這裏),不y

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