:: nghĩa là gì c++

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

Home Categories FAQ/Guidelines Terms of Service Privacy Policy

This entry is part 8 of 69 in the series Học C Không Khó

82 / 100

Trong bài học này, bạn đọc sẽ cùng Lập trình không khó chuyển sang phần kiến thức “toán tử trong C“. Toán tử là các ký hiệu được dùng để thực hiện một phép toán trong ngôn ngữ lập trình. Chúng ta sẽ cùng nhau đi qua từng loại toán tử nhé.

Các loại toán tử trong C

Nội dung cụ thể chúng ta sẽ học trong 3 bài học như sau:

  • Bài 8. Toán tử số học
  • Bài 9. Toán tử gán và toán tử tăng, giảm
  • Bài 10. Toán tử logic và toán tử quan hệ

Toán tử số học (Arithmetic Operators)

Toán tử số học là một loại toán tử trong C: Được sử dụng để thực hiện các phép toán: cộng, trừ, nhân, chia,… trên các giá trị số (biến và hằng). Đây là các toán tử cần sự tham gia của 2 giá trị số nên được phân loại là các toán tử 2 ngôi.

Toán tử Ý nghĩa
+ phép toán cộng
phép toán trừ
* phép toán nhân
/ phép toán chia
% phép toán lấy số dư(chỉ áp dụng cho số nguyên)

Video hướng dẫn về toán tử số học

Source code minh họa

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#include <stdio.h>

int main(){

    int a, b;

    printf("\nNhap a = "); scanf("%d", &a);

    // Lưu ý nhập b != 0

    printf("\nNhap b = "); scanf("%d", &b);

    // Phép (+)

    int sum = a + b;

    printf("\n%d + %d = %d", a, b, sum);

    // Phép (-)

    int sub = a - b;

    printf("\n%d - %d = %d", a, b, sub);

    // Phép (*)

    int mul = a * b;

    printf("\n%d * %d = %d", a, b, mul);

    // Phép (/)

    float div = a / (float)b;

    // float div = a / b * 1.0;

    // float div = (float)a / b;

    // float div = (float)(a / b); // do not use

    printf("\n%d / %d = %f", a, b, div);

    // Phép (%)

    int mod = a % b;

    printf("\n%d %% %d = %d", a, b, mod);

}

Kết quả chạy chương trình:

PS G:\c_cources\day_8> .\ArithmeticOperators.exe

Nhap a = 8

Nhap b = 3

8 + 3 = 11

8 - 3 = 5

8 * 3 = 24

8 / 3 = 2.666667

8 % 3 = 2

Toán tử tăng, giảm (Increment and Decrement)

Toán tử tăng, giảm là 1 loại toán tử trong C và là các toán tử 1 ngôi, bao gồm 2 toán tử sau:

  • Toán tử ++: Tăng giá trị lên 1 đơn vị
  • Toán tử --: Giảm giá trị đi 1 đơn vị

Các lưu ý khi sử dụng và khái niệm về tiền tố, hậu tố bạn xem video bài số 9 sau đây.

Code minh họa:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <stdio.h>

int main(){

    int a;

    printf("\nNhap a = "); scanf("%d", &a);

    // Toán tử ++

    ++a;

    printf("\na++ = %d", a);

    // // Toán tử --

    --a;

    printf("\na-- = %d", a);

    a = 5;

    printf("\na = %d", a);

    // Tiền tố và hậu tố a++ và ++a

    printf("\n++a = %d", ++a);

    a = 5;

    printf("\n--a = %d", --a);

    a = 5;

    printf("\na++ = %d", a++);

    a = 5;

    printf("\na-- = %d", a--);

}

Kết quả của chương trình:

Nhap a = 5

++a = 6

--a = 4

a++ = 5

a-- = 5

Toán tử gán (Assignment Operators)

Toán tử gán là toán tử trong ngôn ngữ C được dùng để gán giá trị cho 1 biến trong ngôn ngữ lập trình C. Bao gồm các toán tử sau:

Toán tử Viết gọn Viết đầy đủ
= a = b a = b
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b

Code minh họa:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <stdio.h>

int main(){

    int a = 5, c;

    c = a;      // c is 5

    printf("c = %d\n", c);

    c += a;     // c is 10 => c = c + a

    printf("c = %d\n", c);

    c -= a;     // c is 5 => c = c - a

    printf("c = %d\n", c);

    c *= a;     // c is 25 => c = c * a

    printf("c = %d\n", c);

    c /= a;     // c is 5 => c = c / a

    printf("c = %d\n", c);

    c %= a;     // c = 0 => c = c % a

    printf("c = %d\n", c);

    // return 0;

}

Kết quả của chương trình:

PS G:\c_cources\day_9> .\Assignment.exe

c = 5

c = 10

c = 5

c = 25

c = 5

c = 0

Toán tử quan hệ (Relational Operators)

Toán tử quan hệ là một loại toán tử trong C được dùng để thực hiện các phép kiểm tra mối quan hệ giữa 2 toán hạng. Nếu quan hệ kiểm tra là đúng thì nó trả về giá trị true và trả về false trong trường hợp ngược lại.

Toán tử Ý nghĩa Ví dụ
== so sánh bằng 7 == 3 cho kết quả là 0
> so sánh lớn hơn 5 > 1 cho kết quả là 1
< so sánh nhỏ hơn 5 < 2 cho kết quả là 0
!= so sánh khác 5 != 4 cho kết quả là 1
>= lớn hơn hoặc bằng 8 >= 3 cho kết quả là 1
<= nhỏ hơn hoặc bằng 5 <= 0 cho kết quả là 0

Video bài học

Code minh họa:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <stdio.h>

int main(){

    int a = 5, b = 5, c = 10;

    printf("%d == %d is %d \n", a, b, a == b);

    printf("%d == %d is %d \n", a, c, a == c);

    printf("%d > %d is %d \n", a, b, a > b);

    printf("%d > %d is %d \n", a, c, a > c);

    printf("%d < %d is %d \n", a, b, a < b);

    printf("%d < %d is %d \n", a, c, a < c);

    printf("%d != %d is %d \n", a, b, a != b);

    printf("%d != %d is %d \n", a, c, a != c);

    printf("%d >= %d is %d \n", a, b, a >= b);

    printf("%d >= %d is %d \n", a, c, a >= c);

    printf("%d <= %d is %d \n", a, b, a <= b);

    printf("%d <= %d is %d \n", a, c, a <= c);

}

Kết quả chạy:

PS G:\c_cources\day_10> g++ .\Relation.cpp -o .\Relation

PS G:\c_cources\day_10> .\Relation.exe

5 == 5 is 1

5 == 10 is 0

5 > 5 is 0

5 > 10 is 0

5 < 5 is 0

5 < 10 is 1

5 != 5 is 0

5 != 10 is 1

5 >= 5 is 1

5 >= 10 is 0

5 <= 5 is 1

5 <= 10 is 1

Toán tử logic (Logical Operators)

Toán tử logic là một toán tử trong C. Toán tử logic bao gồm các toán tử sau:

  • Toán tử &&: là toán tử AND, trả về true khi và chỉ khi tất cả các toán hạng đều đúng.
  • Toán tử ||: là toán tử OR, trả về true khi có ít nhất 1 toán hạng đúng.
  • Toán tử !: là toán tử NOT, phủ định giá trị của toán hạng.

Code minh họa:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#include <stdio.h>

int main(){

    int a = 5;

    printf("\n%d", (a > 0 && a % 2 == 0));

    //              1   &&  0 = 0

    printf("\n%d", (a % 2 == 0 || a % 5 == 0));

    //                  0     ||  1 = 1

    printf("\n%d", !(a == 5));

    // Tại sao không dùng & hay |?

    int b = 5;

    // dấu ||

    printf("\n%d", (b == 5 || b++ > 0));

    printf("\nb = %d", b);

    b = 5;

    printf("\n%d", (b == 5 | b++ > 0));

    printf("\nb = %d", b);

    // dấu ||

    b = 5;

    printf("\n%d", (b != 5 && b++ > 0));

    printf("\nb = %d", b);

    b = 5;

    printf("\n%d", (b != 5 & b++ > 0));

    printf("\nb = %d", b);

}

Kết quả chạy:

PS G:\c_cources\day_10> .\Logical.exe

0

1

0

1

b = 5

1

b = 6

0

Các toán tử khác

Ngoài các toán tử trên, chúng ta còn có các toán tử khác:

  • Toán tử bit (Bitwise Operators), nội dung này là phần kiến thức khó. Chúng ta chưa học trong bài này.
  • Toán tử “phảy” (Comma Operator)

Tài liệu tham khảo

  1. https://www.programiz.com/c-programming/c-operators