2010-04-23 62 views
17

Tôi chỉ đảm bảo rằng tôi hiểu khái niệm này một cách chính xác. Với toán tử *, tôi tạo một biến mới, được gán một vị trí trong bộ nhớ. Vì vậy, không phải các biến trùng lặp không cần thiết và giá trị của chúng, toán tử & được sử dụng để truyền các giá trị cho các phương thức và nó thực sự trỏ đến phiên bản gốc của biến, trái với việc tạo các bản sao mới ... Nó rõ ràng là một sự hiểu biết nông cạn, nhưng tôi chỉ muốn chắc chắn rằng tôi không nhận được chúng trộn lẫn. Cảm ơn!Sự khác nhau giữa * và toán tử trong lập trình c là gì?

+4

Bạn có chắc chắn bạn không bị nhầm lẫn với C++ trong đó sử dụng & như một nhà điều hành tài liệu tham khảo cũng như địa chỉ-of nhà điều hành? –

+1

Có thể dupe: http://stackoverflow.com/questions/2667420/ – sbi

+2

Là toán tử, '*' và '&' là các nghịch đảo, như '++' và '--', hoặc' + 'và' -' hoặc '*' và '/'. – outis

Trả lời

38

Không hoàn toàn. Bạn đang nhầm lẫn một * xuất hiện trong tên kiểu (được sử dụng để xác định biến), với toán tử *.

int main() { 
    int i; // i is an int 
    int *p; // this is a * in a type-name. It means p is a pointer-to-int 
    p = &i; // use & operator to get a pointer to i, assign that to p. 
    *p = 3; // use * operator to "dereference" p, meaning 3 is assigned to i. 
} 
11

Một lần sử dụng & để tìm địa chỉ của biến. Vì vậy, nếu bạn có:

int x = 42; 

và (ví dụ) các máy tính đã được lưu trữ x tại vị trí địa chỉ 5, &x sẽ 5. Tương tự như vậy bạn có thể cửa hàng giải quyết trong một biến gọi là một con trỏ :

int* pointer_to_x = &x; // pointer_to_x has value 5 

Một khi bạn có một con trỏ, bạn có thể dereference nó sử dụng toán tử * để chuyển đổi nó trở lại vào loại mà nó trỏ :

int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x" 
         // which is the address of x. x has value 42, so y will be 42. 
4

Khi biến được ghép nối với toán tử *, biến đó giữ địa chỉ bộ nhớ.

Khi được ghép nối với toán tử &, nó trả về địa chỉ mà tại đó biến được giữ.

Nếu bạn có

int x = 5; //5 is located in memory at, for example, 0xbffff804 
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address 

cả x*y sẽ mang lại 5

Các vấn đề liên quan