2012-04-08 35 views
6

Gần đây, tôi đã xem video này trên Programming Paradigms và prof. các thuật ngữ được sử dụng như dấu sao, dấu sao và ký hiệu.C++: Dấu hoa thị, dấu hoa thị và dấu sao?

Đây là những gì làm thế nào ông sử dụng những nhà khai thác:

int i = 37; 
float f = *(float*)&i; 

Và làm thế nào ông lên tiếng dòng 2 khi viết nó:

phao "f" bằng sao phao dấu, dấu và i

Tôi hiểu ý nghĩa của dấu hoa thị và dấu và ý nghĩa của việc sử dụng dấu sao ở đây là gì? Nó có đồng nghĩa với dấu hoa thị không?

+5

Anh quên đề cập đến các dấu ngoặc đơn. –

+5

... và dấu chấm phẩy. – Blastfurnace

+0

Làm tôi ngạc nhiên, nếu bạn nói gì cả, tại sao không chỉ đơn giản nói thay vào đó ... – Bart

Trả lời

8

* sau khi float được sử dụng để tạo thành một loại. Rất thường xuyên khi đề cập đến một loại con trỏ trong từ mọi người sẽ nói "ngôi sao" sau khi loại thay vì "con trỏ", ví dụ như. "malloc trả về một dấu sao trống". Tôi chưa bao giờ nghe bất kỳ ai sử dụng "dấu hoa thị" để chỉ một loại.

* khi bắt đầu được sử dụng để không tham chiếu đến con trỏ do đó truy cập vào giá trị trỏ tới (được hiểu là float do diễn viên sau). Một lần nữa, theo kinh nghiệm của riêng tôi, tôi chưa từng nghe ai sử dụng "dấu hoa thị" ở đây. Mọi người chỉ có xu hướng nói "không tham chiếu" để mô tả hoạt động đang được thực hiện.

Tôi sẽ không đọc quá nhiều vào nó.Có hai ngữ cảnh khác nhau ở đây khi bạn phát hiện chính xác và miễn là bạn hiểu ý nghĩa của chúng từ điểm nhìn C++ thì tốt thôi.

+0

Cảm ơn! Câu trả lời này có hiệu quả tại sao giáo sư nói "sao" thay vì "dấu hoa thị". – witherspoon

0

Tôi nghĩ người trình bày chỉ muốn tránh sự im lặng vụng về trong khi anh ấy viết mã. Theo như tôi biết, không có sự khác biệt giữa dấu hoa thị và dấu sao trong ngữ cảnh này.

2
float f = *(float*)&i; 

Trong trường hợp này trái * và phải * có các ngữ nghĩa khác nhau. Trái * có nghĩa là giá trị nhận được bằng cách tham chiếu. Phải * khai báo loại tham chiếu.

+0

"có ngữ nghĩa khác nhau" Không liên quan đến cách phát âm - nó vẫn là biểu tượng tương tự. – SigTerm

+0

Có, tất nhiên) –

1

Có đồng nghĩa với dấu hoa thị không?

Có. Shift + 8 trên MY bàn phím cửa sổ. Ví dụ của bạn chứng minh lý do tại sao bạn không nên cố gắng đọc chương trình C++ to bằng biểu tượng. "Bằng" trong C++ là "==". "=" là bài tập. Thêm vào đó anh quên nói về dấu ngoặc đơn và dấu chấm phẩy. Tại thời điểm này (4 sai lầm trong một dòng mã) ông có thể đã viết những điều chết tiệt âm thầm.

Nó sẽ tốt hơn nhiều nếu anh chàng đọc phần này:

float f = *(float*)&i; 

hơi như thế này:

"Đi con trỏ đến i, C-phong cách quăng xuống con trỏ đến nổi, dereference và gán giá trị cho biến phao f ". Làm cho nhiều ý nghĩa hơn rằng "sao/dấu hoa thị" vô nghĩa.

P.S. Nếu bạn thực sự thích twisters lưỡi, bạn có thể thử đọc to bất kỳ mã sử dụng tăng, iostreams, nhà điều hành < <, phôi, bitwise hoạt động và "lạc đà trường hợp" để phân biệt giữa các lớp học và phương pháp. Bài tập như vậy sẽ không cải thiện kỹ năng lập trình của bạn, tất nhiên ...

+2

Shift + 8 là "(" trên bàn phím của tôi (cửa sổ, quá!). Bạn không nên giả định tất cả bàn phím có cùng bố cục trên toàn thế giới –

+3

-1: OP biết đó là biểu tượng giống nhau Câu hỏi đơn giản là hỏi xem liệu có ý nghĩa gì đối với việc sử dụng hai thuật ngữ khác nhau dựa trên hai ngữ cảnh khác nhau trong đó * đã được sử dụng hay không. – Troubadour

+0

@Troubadour: "Tôi nghĩ điều đó rất thô lỗ" Tôi không Không nghĩ rằng nó là rất thô lỗ, và nó không được dự định là thô lỗ Vì vậy, nếu * bạn * nghĩ rằng nó là thô lỗ đó là bởi vì bạn đang nhảy đến kết luận. "ý nghĩa cho việc sử dụng hai thuật ngữ khác nhau" Không có Theo như tôi biết "ngôi sao" và "dấu hoa thị" không phải là một phần của một số thuật ngữ C++ nổi tiếng và thường không đề cập đến "derefernece" hoặc "đúc". các thuật ngữ tốt hơn - "derefernece" và "cast". – SigTerm

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