Sau 2 lệnh này k bằng mấy? Tại sao

Vậy là bạn muốn gây war và công kích cá nhân? Được thôi, bạn có thể thấy những ảnh chụp IDE của mình hoàn toàn là reply những người khẳng định chắc chắn là bằng 5 hoặc bằng 6. Và những hình đó, đơn giản nói rằng “HỌ CÓ THỂ SAI RỒI”.
Và câu trả lời chính xác là của @drgnz, mình hoàn toàn không có ý kiến gì với câu trả lời này bạn à.
Thân.

(trước khi đọc câu hỏi này, tất cả suy nghĩ của mình nằm gọn trong post của @Skyfall, một thứ tự ++ và = y như thế. Nhưng câu hỏi này đưa ra, có lẽ nên nghi ngờ cả những lý giải hợp lý nhất)

còn ++k thì sao v mấy bạn

hiểu theo lẽ thông thường thì ++k với k = 5 có thể hiểu là Em không biết gì về cú pháp đâu :joy:

operator ++(int &k)
{
   k = k + 1;
   return k;
}

k bằng 5 đơn giản là vì nó sẽ gán trước khi tăng biến k. ++k tức là nó sẽ tăng xong rồi mới gán. Vì vậy k sẽ bằng 5.

Hi @viethung26

Trước tiên bạn hãy xem toán tử ++ như một function và function này sẽ return ra một giá trị:
Sẽ có 2 trường hợp như sau:

int k = 5;
k++; /*Toán tử này sẽ tăng biến k lên 1 đơn vị 
      và return về giá trị trước khi tăng
      Trong vd này thì: 
           * toán tử ++ sẽ tăng k lên 6;
           * và trả về giá trị là 5 
             (là giá tri ban đầu trước khi tăng) */

++k; /*Toán tử này sẽ tăng biến k lên 1 đơn vị 
      và return về giá trị sau khi tăng
      Trong vd này thì: 
           * toán tử ++ sẽ tăng k lên 6;
           * và trả về giá trị là 6 (là giá tri sau khi tăng)  */
  • Nhưng điều giải thích trên cũng không được xem là đúng 100% vì còn tùy thuôc vào quyết đinh của compiler sẽ cho return giá trị là trước hay sau khi tăng nữa.
    • có compiler sẽ xem ++k hay k++ là như nhau và luôn return về giá trị trước khi tăng
    • cũng có compiler sẽ xem ++k hay k++ là như nhau và luôn return về giá trị sau khi tăng

quay trở lại câu hỏi của bạn:

k = k++;
  • Toán tử 1 ngôi ++ sẽ ưu được xử lý trước và sẽ tăng k lên 6:
  • Toán tử gán = sẽ phu thuộc vào giá tri return của toán tử ++;
    • nếu compiler quyết đinh k++ sẽ return giá tri trước khi tăng: lúc này k sẽ được gán lại là 5
    • nếu compiler quyết đinh k++ sẽ return giá tri sau khi tăng: lúc này k sẽ được gán lại là 6

Hy vong câu trả lời này sẽ thỏa mãn được bạn

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