2010-09-25 62 views
5

Tôi đã nhìn thấyvòng lặp for thiếu khởi

for(;;) 

for (; *s != '\0'; s++) 

Tại sao nó trống như thế. Cảm ơn.

+0

Đối với tất cả các câu trả lời hiện tại: Tôi nghĩ rằng anh ấy thực sự muốn biết những gì trống là cho. –

Trả lời

17

Tuyên bố for hoạt động như:

for (initialization; test-condition; update)

Và bất kỳ hoặc tất cả các ba có thể được bỏ qua (trống bên trái). Vì vậy:

  • for (;;) là một vòng lặp vô hạn tương đương với while (true) vì không có điều kiện kiểm tra. Trên thực tế, for (int i=0; ;i++) cũng sẽ là một vòng lặp vô hạn .

  • for (; *s != '\0'; s++) là vòng lặp không có khởi tạo. s sẽ trỏ đến đầu (có thể) một chuỗi và được tăng lên cho đến khi nó đạt đến ký tự null '\0' biểu thị kết thúc chuỗi. Trường hợp này có lặp qua tất cả các nhân vật của chuỗi s

Vòng lặp vẫn sẽ bị gián đoạn nếu có một tuyên bố break trong cơ thể lặp, hoặc một cuộc gọi đến exit(), vv ...

+1

'\ 0' là ký tự' NUL'.'NUL' và 'NULL' khác nhau. –

+3

@Prasoon Một số người (như tôi) chỉ gọi nó là [null character] (http://en.wikipedia.org/wiki/Null_character) – NullUserException

1

nó có nghĩa là làm mãi mãi

cho (điều kiện ban đầu; tăng; điều kiện kết thúc); Bạn có thể bỏ qua bất kỳ những

Xem http://en.wikipedia.org/wiki/For_loop

Ba biểu thức kiểm soát, phân cách bằng dấu chấm phẩy ở đây, là từ trái sang phải biểu thức khởi tạo , khái niệm kiểm tra vòng lặp, và biểu thức đếm . Bộ khởi tạo được đánh giá chính xác một lần ngay tại đầu vòng lặp. Biểu thức kiểm tra vòng lặp được đánh giá tại bắt đầu mỗi lần lặp qua vòng lặp và xác định khi nào thì vòng lặp sẽ thoát. Cuối cùng, biểu thức tính được đánh giá tại kết thúc của mỗi vòng lặp lặp lại - thậm chí nếu tiếp tục được gọi - và thường là chịu trách nhiệm thay đổi vòng lặp biến.

Trong hầu hết các ngôn ngữ cung cấp loại vòng lặp này , mỗi biểu thức vòng lặp điều khiển là . Khi bỏ qua biểu thức kiểm tra vòng lặp được thực hiện luôn đúng, trong khi trình khởi tạo và biểu thức đếm được coi là không có op khi bị bỏ qua. Dấu chấm phẩy trong cú pháp là đủ để cho biết sự thiếu sót của một trong các biểu thức.

4

for(;;) là vòng lặp vô hạn. Nó có hiệu quả giống hệt như while (true).

Lý do hoạt động này là do khi điều kiện giữa trong vòng lặp for trống, nó được hiểu là luôn luôn đúng.

for (; *s != '\0'; s++) được sử dụng để đọc chuỗi ký tự theo từng ký tự. Cách tiếp cận này hoạt động vì mỗi chuỗi C kết thúc bằng một ký tự null (\0).

2

Các phần trống sẽ không làm gì cả. Vì vậy, for (;;) tạo ra một vòng lặp vô hạn mà không có gì cả, và không bao giờ thoát vì không có điều kiện trong vòng lặp. Ví dụ thứ hai của bạn:

for (; *s != '\0'; s++) 

chỉ là vòng lặp bình thường mà không có bất kỳ biểu thức khởi tạo nào. Điều này dựa trên thực tế là s đã có giá trị ban đầu và chỉ lặp lại cho đến khi nó đạt đến cuối chuỗi.

6

Nó là "trống như thế" bởi vì tác giả của mã để trống. Tác giả không muốn/cần làm bất cứ điều gì trong phần tương ứng của câu lệnh for, vì vậy nó đã được để trống.

for (;;) là một câu lệnh lặp lại vô thời hạn (trừ khi nó bị gián đoạn từ nội dung chu kỳ bên trong).

for (; *s != '\0'; s++) là tuyên bố không cần phần khởi tạo vì mọi thứ cần thiết (như giá trị ban đầu của s) đã được khởi tạo trước câu lệnh for.

1

while(1)while(true) cũng giống như for(;;)

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