Các chức năng getline là từ mục 1.9. Điều mới mẻ chính là khai lineptr: char * lineptr [Maxlines] nói rằng lineptr là một mảng của các yếu tố Maxlines, mỗi phần tử trong đó là một con trỏ đến một char. Đó là, lineptr [i] là một con trỏ ký tự, và * lineptr [i] là kí tự nó trỏ tới, các ký tự đầu tiên của dòng văn bản thứ i lưu. Kể từ lineptr bản thân nó là tên của một mảng, nó có thể được coi như là một con trỏ theo cách tương tự như trong ví dụ trước đây của chúng tôi, và writelines có thể được viết thay vì như
printf ( "% s n", * lineptr ++); } Ban đầu, * điểm lineptr vào dòng đầu tiên; mỗi phần tử tiến nó để con trỏ dòng tiếp theo trong khi NLINES lối vào được tính xuống. Với đầu vào và đầu ra được kiểm soát, chúng tôi có thể tiến hành phân loại. Các quicksort từ Chương 4 cần thay đổi nhỏ: tờ khai phải được sửa đổi, và các hoạt động so sánh phải được thực hiện bằng cách gọi strcmp. Các thuật toán vẫn giữ nguyên, trong đó cung cấp cho chúng tôi một số tin tưởng rằng nó sẽ vẫn làm việc.
Qsort (v, cuối cùng + 1, bên phải); } Tương tự như vậy, sự trao đổi thường xuyên các nhu cầu chỉ thay đổi nhỏ:
} Vì bất kỳ yếu tố cá nhân của v (bí danh lineptr) là một con trỏ ký tự, tạm thời phải có thêm, vì vậy ai có thể được sao chép vào khác. Tập thể dục 5-7. Viết lại readlines để lưu trữ các dòng trong một mảng được cung cấp bởi chính, thay vì gọi alloc để duy trì lưu trữ. Làm thế nào nhanh hơn nhiều là chương trình?
5,7 đa chiều Mảng C cung cấp các mảng đa chiều hình chữ nhật, mặc dù trong thực tế họ là ít hơn nhiều so với sử dụng các mảng của con trỏ. Trong phần này, chúng ta sẽ thấy một số tài sản của họ. Hãy xem xét các vấn đề chuyển đổi ngày, từ ngày của tháng cho đến ngày của năm lại và ngược. Ví dụ, ngày 01 tháng 3 là ngày thứ 60 của một năm không nhuận, và ngày thứ 61 của một năm nhuận. Hãy để chúng tôi xác định hai chức năng để làm việc chuyển đổi: chuyển đổi day_of_year tháng và ngày vào các ngày trong năm, và MONTH_DAY chuyển đổi các ngày trong năm vào tháng và ngày. Vì chức năng sau này tính hai giá trị, tháng và ngày đối số sẽ được trỏ: MONTH_DAY (1988, 60, & m, d &) đặt m 2 và d đến 29 (ngày 29 tháng 2). Các chức năng này đều cần cùng một thông tin, một bảng của số ngày trong mỗi tháng ( ` 'ba mươi ngày thì được sự tháng chín ...' '). Kể từ khi số ngày mỗi tháng khác nhau cho năm nhuận và năm không nhuận, nó dễ dàng hơn để phân chia chúng thành hai hàng của một mảng hai chiều hơn để theo dõi những gì xảy ra đến tháng trong tính toán. Mảng và các chức năng để thực hiện các phép biến đổi như sau:
00:22:23] * pday = yearday; } Nhớ lại rằng các giá trị số học của một biểu thức logic, chẳng hạn như một cho bước nhảy vọt, hoặc là không (false) hoặc một (true), vì vậy nó có thể được sử dụng như một subscript của daytab mảng. Các daytab mảng có đến được bên ngoài để cả hai day_of_year và MONTH_DAY, vì vậy cả hai đều có thể sử dụng nó. Chúng tôi đã làm cho nó char để minh họa việc sử dụng hợp pháp của char để lưu trữ các số nguyên không nhân vật nhỏ. daytab là mảng hai chiều đầu tiên, chúng tôi đã xử lý. Trong C, một mảng hai chiều thực sự là một mảng một chiều, mỗi phần tử của một mảng. Do đó subscript được viết như
đang được dịch, vui lòng đợi..