30/09/2018, 16:14

Phép tăng của con trỏ trong c/c++

int a[2] = {3, 7}, *p = a; 
(*p)++ ;   // tăng (sau) giá trị nơi p trỏ ≡ tăng a[0] thành 4 
++(*p) ;   // tăng (trước) giá trị nơi p trỏ ≡ tăng a[0] thành 4 
*(p++) ;   // lấy giá trị nơi p trỏ (3) và tăng trỏ p (tăng sau), p →a[1] 
*(++p) ;   // tăng trỏ p (tăng trước), p →a[1] và lấy giá trị nơi p trỏ(7) 
  • Lưu ý : Phân biệt p+1 và p++ (hoặc ++p):
    p+1 được xem như một con trỏ khác với p. p+1 trỏ đến phần tử sau p.
    p++ là con trỏ p nhưng trỏ đến phần tử khác. p++ trỏ đến phần tử đứng sau phần tử p trỏ đến ban đầu.
    Phân biệt *(p++) và *(++p ):

Các phép toán tự tăng giảm cũng là một ngôi, mức ưu tiên của chúng là cao hơn
các phép toán hai ngôi khác và cao hơn phép lấy giá trị(*). Cụ thể:

*p++   ≡ *(p++) 
*++p   ≡ *(++p) 
++*p   ≡ ++(*p) 

Cũng giống các biến nguyên việc kết hợp các phép toán này với nhau rất dễ gây
nhầm lẫn, do vậy cần sử dụng cặp dấu ngoặc để qui định trình tự tính toán.

Bài liên quan
0