2010-09-07 49 views
56

Tôi có một con trỏ int (int * count) nếu tôi muốn tăng số nguyên được chỉ vào sử dụng ++ Tôi nghĩ tôi sẽ gọigiá trị thặng dư của int được trỏ đến bởi con trỏ

*count++; 

Tuy nhiên, tôi đang nhận được một cảnh báo xây dựng "kết quả biểu hiện không sử dụng". Tôi có thể gọi

*count += 1; 

Nhưng, tôi muốn biết cách sử dụng ++. Bất kỳ ý tưởng?

Trả lời

75

++ có quyền ưu tiên bằng * và kết hợp là từ phải sang trái. Xem here. Nó thậm chí còn phức tạp hơn bởi vì mặc dù ++ sẽ được liên kết với con trỏ tăng được áp dụng sau khi đánh giá của tuyên bố.

Trình tự sự việc xảy ra là:

  1. bài increment, nhớ những giá trị địa chỉ con trỏ sau tăng lên như một tạm thời
  2. dereference không tăng lên địa chỉ con trỏ
  3. Áp dụng các địa chỉ con trỏ tăng lên để đếm, đếm bây giờ trỏ đến địa chỉ bộ nhớ có thể tiếp theo cho một thực thể thuộc loại của nó.

Bạn nhận được cảnh báo bởi vì bạn không bao giờ thực sự sử dụng giá trị dereferenced ở bước 2. Giống như @Sidarth nói, bạn sẽ cần ngoặc để buộc các tự đánh giá:

(*ptr)++ 
+7

Tôi muốn thêm rằng Tôi luôn viết trường hợp này là '++ * ptr; 'bởi vì ưu tiên là không rõ ràng, và nếu kết quả không được sử dụng thì không cần phân biệt giữa tiền tố và postincrement. – RBerteig

+2

@RBerteig: Nó có thể rõ ràng với trình biên dịch nhưng nó vẫn còn gây nhầm lẫn với một con người. Tốt hơn nhiều để sử dụng dấu ngoặc đơn vì điều này sẽ giúp bạn dễ đọc hơn. –

+1

@Martin, sử dụng dấu ngoặc đơn có thể gây nhầm lẫn với con người. Khi viết như tôi đã làm, chỉ có một thứ tự hợp lý của các hoạt động, và phù hợp với việc đọc tự nhiên của "tăng", "một cái gì đó được trỏ đến bởi", "p". – RBerteig

13

Thử sử dụng (*count)++. *count++ có thể tăng dần con trỏ đến vị trí tiếp theo và sau đó sử dụng tính năng chuyển hướng (không chủ ý).

Các vấn đề liên quan