Getline chức năng là từ phần 1.9. Điều mới chính là bản tuyên ngôn cho lineptr: char * lineptr [MAXLINES] nói rằng lineptr là một mảng của các yếu tố MAXLINES, mỗi yếu tố trong đó là một con trỏ chỉ tới char một. Đó là, lineptr [i] là một con trỏ ký tự, và * lineptr [i] là nhân vật nó trỏ đến, ký tự đầu tiên của dòng i-th lưu văn bản. Kể từ khi lineptr là tên của một mảng, nó có thể được coi là một con trỏ trong cách tương tự như trong ví dụ trước đó của chúng tôi và writelines có thể được viết thay vào đó là printf ("%s
", * lineptr ++); } Ban đầu, * lineptr trỏ tới dòng đầu tiên; mỗi yếu tố tiến bộ nó để con trỏ dòng kế tiếp trong khi nlines tính. Với đầu vào và đầu ra dưới sự kiểm soát, chúng tôi có thể tiến hành phân loại. Hay Hoaresort từ chương 4 cần thay đổi nhỏ: Các tờ khai đã được thay đổi, và thao tác 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 như nhau, mà cho chúng ta một số sự tự tin rằng nó sẽ vẫn làm việc. qsort (v, cuối + 1, bên phải); } Tương tự như vậy, những thói quen trao đổi nhu cầu chỉ thay đổi nhỏ: } Từ 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 ngoài ra, do đó, một trong những có thể được sao chép đến khác. Tập 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, chứ không phải là gọi danh để duy trì lí. Nhanh hơn bao 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ọ đang ít sử dụng hơn mảng của các con trỏ. Trong phần này, chúng tôi sẽ hiển thị một số tài sản của họ. Hãy xem xét các vấn đề về chuyển đổi ngày, từ ngày của tháng ngày trong năm và ngược lại. Ví dụ, 1 tháng 3 là 60 ngày của một không-năm nhuận, 61st ngày trong một năm. Hãy để chúng tôi xác định hai chức năng để làm các chuyển đổi: day_of_year chuyển đổi tháng và ngày vào ngày trong năm, và month_day chuyển đổi ngày của năm vào tháng và ngày. Kể từ khi chức năng sau này tính hai giá trị, các đối số tháng và ngày sẽ là liên kết: month_day (1988, 60, và m & d) đặt m 2 và d để 29 (29 tháng 2). Các chức năng này cả hai cần các thông tin tương tự, một bảng số ngày trong mỗi tháng ('' ba mươi ngày hath ngày...''). Vì số lượng ngày mỗi tháng khác trong năm nhuận và phòng không leap năm, nó dễ dàng hơn để tách chúng thành hai hàng một mảng hai chiều hơn để theo dõi của những gì sẽ xảy ra cho tháng hai trong tính toán. Các mảng và các chức năng để thực hiện các phép biến đổi là như sau: 12: 22:23] * pday = yearday; } Nhớ lại rằng 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, là 0 (false) hoặc một (đúng), do đó, nó có thể được sử dụng như một chỉ số của mảng daytab. Daytab mảng đã được bên ngoài để day_of_year và month_day, do đó, cả hai họ có thể sử dụng nó. Chúng tôi đã làm cho nó char để minh họa một sử dụng hợp pháp của char để lưu trữ các số nguyên vật nhỏ. daytab là mảng hai chiều đầu tiên chúng tôi có xử lý. C, một mảng hai chiều thực sự là một mảng hết, mỗi người trong số các yếu tố mà là một mảng. Do đó chỉ được viết là daytab [i] [j] 49 | P g e Khác với sự phân biệt mô này, một mảng hai chiều có thể được điều trị trong cùng một cách như trong các ngôn ngữ khác. Yếu tố được lưu trữ bởi hàng, do đó, chỉ số bìa phải, hoặc cột, thay đổi nhanh nhất vì yếu tố được truy cập trong thứ tự lưu trữ. Một mảng được khởi tạo bởi một danh sách các initializers ở trong ngoặc; mỗi hàng của một mảng hai chiều được khởi tạo bởi một danh sách tương ứng phó. Chúng tôi bắt đầu mảng daytab với một cột zero do đó số lượng tháng có thể chạy từ 1 đến 12 tự nhiên thay vì 0-11. Từ space không phải là một phí bảo hiểm ở đây, điều này là rõ ràng hơn so với việc điều chỉnh các chỉ số. Nếu một mảng hai chiều là được truyền cho một hàm, tuyên bố tham số trong các chức năng phải bao gồm số lượng các cột; số hàng là không thích hợp, vì những gì được thông qua, như trước đây, một con trỏ đến một loạt các hàng, mỗi hàng ở đâu một mảng 13 một. Trong trường hợp cụ thể này, nó là một con trỏ đến các đối tượng là mảng của 13 một. Do đó nếu daytab mảng để được truyền cho một hàm f, tuyên bố của f sẽ là: f (int daytab[2][13]) {...} Nó cũng có thể là f (int daytab[][13]) {...} kể từ khi số hàng là không thích hợp, hoặc nó có thể là f (int (*daytab)[13]) {...} mà nói rằng các tham số là một con trỏ chỉ tới một mảng số nguyên 13. Các dấu ngoặc đơn là cần thiết vì dấu ngoặc vuông [] có các ưu tiên cao hơn *. Mà không có dấu ngoặc đơn, kê khai int * daytab [13] là một mảng của các con trỏ 13 số nguyên. Nói chung, chỉ đầu tiên kích thước (chỉ số) của một mảng là miễn phí; Tất cả những người khác có thể được xác định. Phần 5.12 có một cuộc thảo luận thêm trong tờ khai phức tạp. Tập 5-8. Có là không có lỗi, kiểm tra tại day_of_year hoặc month_day. Khắc phục lỗi này. 5.8 khởi tạo trỏ mảng xem xét vấn đề của việc viết một chức năng month_name(n), mà trả về một con trỏ đến một nhân vật chuỗi chứa
đang được dịch, vui lòng đợi..