Kí hiệu * trong dòng code có ý nghĩa gì?

bool CheckPacketsAreIdentical( protocol2::Packet *p1, protocol2::Packet *p2 )
{
    assert( p1 );
    assert( p2 );

    if ( p1->GetType() != p2->GetType() )
        return false;

    switch ( p1->GetType() )
    {
        case TEST_PACKET_A:     return *((TestPacketA*)p1) == *((TestPacketA*)p2);
        case TEST_PACKET_B:     return *((TestPacketB*)p1) == *((TestPacketB*)p2);
        case TEST_PACKET_C:     return *((TestPacketC*)p1) == *((TestPacketC*)p2);
        default:
            return false;
    }
}

return *((TestPacketA*)p1) == *((TestPacketA*)p2); mấy đấu * đấy là gì có phải là đấu nhân không? Nó có nghĩa là gì ạ. mình chưa từng thấy điều này trước đây. Mọng mọi người giúp đỡ.

Em học về con trỏ trong C nhé.

Để lấy giá trị của một biến con trỏ thì cần có dấu * phía trước biến.

Xem ví dụ này để tạm hiểu nhé.

// C program to demonstrate use of * for pointers in C 
#include <stdio.h> 
  
int main() 
{ 
    // A normal integer variable 
    int Var = 10; 
  
    // A pointer variable that holds address of var. 
    int *ptr = &Var; 
  
    // This line prints value at address stored in ptr. 
    // Value stored is value of variable "var" 
    printf("Value of Var = %d\n", *ptr); 
  
    // The output of this line may be different in different 
    // runs even on same machine. 
    printf("Address of Var = %p\n", ptr); 
  
    // We can also use ptr as lvalue (Left hand 
    // side of assignment) 
    *ptr = 20; // Value at address is now 20 
  
    // This prints 20 
    printf("After doing *ptr = 20, *ptr is %d\n", *ptr); 
  
    return 0; 
} 

Output:

Value of Var = 10
Address of Var = 0x7fffa057dd4
After doing *ptr = 20, *ptr is 20
1 Like

Dấu * trong C có 5 chức năng khác nhau:

  1. Toán tử của phép nhân. Cái này ai cũng biết.
  2. Là một phần trong toán tử *=, thường dùng tương tự như kết hợp của phép nhân và phép gán.
  3. Là một ký tự.
  4. Khai báo kiểu dữ liệu con trỏ cho một biến:
int* a;//a là biến có kiểu dữ liệu là int*
  1. Toán tử truy cập dữ liệu, dùng để truy cập đến ô nhớ mà một biến kiểu con trỏ đang trỏ đến:
int b = *a;//a là biến có kiểu dữ liệu con trỏ, gán giá trị mà a đang trỏ đến cho b

Vô tình (hoặc cố tình) việc khai báo con trỏ và truy cập ô nhớ con trỏ cùng sử dụng ký tự * nên nhiều người mới học cũng dùng nhầm. Không sao, học về con trỏ, làm nhiều sau sẽ quen.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?