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ì?
17
A
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
và *y
sẽ mang lại 5
Các vấn đề liên quan
- 1. Sự khác nhau giữa toán tử dấu chấm (.) Và -> trong C++ là gì?
- 2. Sự khác nhau giữa C# và visual C# là gì?
- 3. Sự khác nhau giữa "||" là gì và "hoặc" trong Perl?
- 4. Sự khác nhau giữa Objective-C và Cocoa là gì?
- 5. Sự khác nhau giữa "||" là gì toán tử và hàm concat trong Oracle?
- 6. Trong Actionscript 3, sự khác nhau giữa toán tử "in" và phương thức "hasOwnProperty" là gì?
- 7. Sự khác nhau giữa 'eq' và '= ~' trong Perl là gì?
- 8. Sự khác nhau giữa Ctrl-C và SIGINT là gì?
- 9. Sự khác nhau giữa toán tử >> và toán tử >>> trong java là gì?
- 10. Sự khác nhau giữa == và = trong Prolog là gì?
- 11. Sự khác biệt giữa isEqualToString và toán tử == trong Mục tiêu C là gì?
- 12. Sự khác nhau giữa C#, .NET và CLI là gì?
- 13. Sự khác nhau giữa cú pháp và ngữ nghĩa của ngôn ngữ lập trình là gì?
- 14. Sự khác nhau giữa -0 và 0 là gì?
- 15. Sự khác nhau giữa toán tử == và phương thức Equals() trong C#?
- 16. Sự khác nhau giữa toán tử quá tải = và nạp chồng quá trình tạo bản sao là gì?
- 17. Sự khác nhau giữa GEM_HOME và GEM_PATH là gì?
- 18. Sự khác nhau giữa document.getElementById ('mybox') và mybox là gì?
- 19. Sự khác biệt giữa <> và! = Toán tử trong MySQL là gì?
- 20. Sự khác nhau giữa chương trình thủ tục và chương trình hướng đối tượng là gì?
- 21. Sự khác nhau giữa WPF và WinForms là gì?
- 22. Sự khác biệt giữa heuristic và thuật toán là gì?
- 23. Sự khác nhau giữa httpCompression và urlCompression là gì?
- 24. Sự khác nhau giữa vector và đỉnh là gì?
- 25. Sự khác biệt giữa lập trình đa lõi trong Erlang và ngôn ngữ khác là gì?
- 26. Sự khác nhau giữa crc32 và crc32b là gì?
- 27. Sự khác nhau giữa MIPS và RISC là gì?
- 28. Sự khác nhau giữa MemoryCache.Add và MemoryCache.Set là gì?
- 29. Sự khác nhau giữa WebRequest.DefaultWebProxy và WebRequest.GetSystemWebProxy() là gì?
- 30. Sự khác nhau giữa C: và C:/
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? –
Có thể dupe: http://stackoverflow.com/questions/2667420/ – sbi
Là toán tử, '*' và '&' là các nghịch đảo, như '++' và '--', hoặc' + 'và' -' hoặc '*' và '/'. – outis