30/09/2018, 16:30
Những trò lố của ưu tiên toán tử
Hôm nay mình sẽ nói về một số cái hay nhầm lẫn khi lập trình, tập trung vào những vấn đề như trên tựa đã ghi (làm cái tựa for fun tý)
mọi người thấy mọi người hay nghĩ thực tế
*p.f (*p).f *(p.f)
int *ap[] int (*ap)[] int *(ap[])
a & b != 0 (a & b) != 0 a & (b != 0)
a << 4 + b (a << 4) + b a << (4 + b)
!= và == sẽ được ưu tiên hơn các toán tử bitwise.
Các phép tính toán học sẽ ưu tiên hơn phép dịch bit.
Con trỏ tới mảng, và mảng con trỏ chắc gặp nhiều.
int main(int argc, const char * argv[])
{
int a[] = { 2, 4, 6};
// 1, con tro toi mang
int (*pta)[] = &a;
printf("%i
", *(*pta +2)); // phan tu thu 3
// 2, mang con tro
int *pa[3];
pa[0] = &a[0];
pa[1] = &a[1];
pa[2] = &a[2];
printf("%i
", **(pa+2)); // phan tu thu 3
return 0;
}
P/S: :d vừa rồi cty mình nhận 1 dự án maintain (code c) toàn bitwise, khoai lòi mắt T_T.
Bài liên quan
I moved 3 posts to an existing topic: Tò mò nghề nghiệp của @crossover