Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Một thú vị về array trong C++. Mọi người thảo luận nhé!

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    8

    Mặc định Một thú vị về array trong C++. Mọi người thảo luận nhé!

    Như chúng ta đã biết thì trong c++. 1 array được định nghĩa như sau:

    data_type array[size] = {element0, element2,..element_size-1};

    Nếu mà khởi tạo
    1. Thiếu phần tử --> tự fill vào là 0 đối với data là số, là ' ' với data la char (không chắc chỗ này nhé )
    2. Thừa phần tử thì --> complier error ngay nhưng hãy xem ví dụ sau:

    hí hí test ra thì frequency[100] = 2 và không bị lỗi gì hết

    C++ Code:
    1. #include <cstdlib>
    2. #include <iostream>
    3. #include <iomanip>
    4. using namespace std;
    5. int main(int argc, char *argv[])
    6. {    
    7.     const int responseSize = 40;   // size of array responses
    8.     const int frequencySize = 11;  // size of array frequency    
    9.     // place survey responses in array responses
    10.     int responses[ responseSize ] = { 1, 2, 6, 4, 8, 5, 100, 100, 8,
    11.        10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7,
    12.        5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };
    13.    
    14.     // initialize frequency counters to 0
    15.     int frequency[ frequencySize ] = { 0 };
    16.    
    17.     // for each answer, select value of an element of array
    18.     // responses and use that value as subscript in array
    19.    // frequency to determine element to increment
    20.    for ( int answer = 0; answer < responseSize; answer++ )
    21.       ++frequency[ responses[answer] ];
    22.    // display results
    23.    cout << "Rating" << setw( 17 ) << "Frequency" << endl;
    24.    // output frequencies in tabular format
    25.    for ( int rating = 1; rating < frequencySize; rating++ )
    26.       cout << setw( 6 ) << rating
    27.            << setw( 17 ) << frequency[ rating ] << endl;          
    28.    cout << "---------"<<frequency[100];
    29.     system("PAUSE");
    30.     return EXIT_SUCCESS;
    31. }
    Bro nào giải thích hộ em 1 chút. Thanks

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình thấy cái này có thú vị gì đâu nhỉ. Đây là kiến thức nhập môn lập trình thôi. Bạn cần phân biệt lỗi runtime và lỗi compile. Bạn chỉ cần viết chương trình đúng cú pháp thì sẽ build thành công. Compiler ko wan tâm đến chương trình chạy đúng hay sai. Lúc khai báo mảng, bạn khai báo nhiều phần tử hơn thì compiler sẽ ko biên dịch được, vì nó biết nhét những phần tử bị dư vào đâu để phát sinh code khởi tạo mảng ? Vì thế nên compiler phải báo lỗi. Nhưng khi bạn khai báo xong rồi, và xuống dưới bạn truy cập phần tử 100 thì compiler vẫn có thể biên dịch được. Còn về lỗi runtime, sở dĩ nó ko xảy ra trong trường hợp của bạn ( hoặc có thể là may mắn chưa xảy ra ) là vì bạn vượt chưa xa khỏi mảng. Ko phải là lúc nào vùng nhớ ngoài biên của mảng cũng ko truy xuất được. Nó có thể là vùng nhớ của biến khác, mảng khác, hoặc một vùng nhớ dự trữ nào đó còn khả năng đọc/ghi được. Vì vậy khi truy xuất nó chương trình vẫn chưa bị văng ngay. Nếu bạn đọc thì chưa đến nỗi nào, nhưng nếu bạn ghi thì đã tạo ra lỗi tràn bộ đệm và nó sẽ để lại hậu họa cho những đoạn code phía dưới. Trường hợp của bạn may mắn vì là đọc và code đó nằm ở vị trí gần cuối chương trình. Nếu code đó ghi và còn có những đoạn code đằng sau nữa thì những đoạn code sau sẽ chạy và phát sinh ra những lỗi rất kỳ lạ và ko đoán được. Nhiều bạn ko biết lại đổ thừa máy hư, cpu bị điên ... Tuy nhiên nếu debug kỹ sẽ thấy là do lỗi của người code, chẳng phải do máy nào cả. Chẳng qua là những bạn đó đã cố ý làm sai nguyên tắc cơ bản như bạn đấy.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    10 2009
    Bài viết
    6

    cái này là do trình biên dịch thôi mà, có trình biên dịch sẽ báo lỗi, có trình ko báo lỗi. nếu chạy được thì mỗi lần sẽ ra một kết quả khác nhau cho phần tử 100. Nói chung là đoạn mã này thật kỳ cục, chả ai viết thế này cả

Các đề tài tương tự

  1. Giải thuật Thảo luận giải Sudoku bằng phương pháp suy luận logic
    Gửi bởi BDK trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 26-03-2014, 11:05 PM
  2. Thảo luận về những câu hỏi tại sao trong C?
    Gửi bởi hieurau123 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 07-05-2013, 04:56 PM
  3. Xóa một phần tử trong mảng array list C# như thế nào?
    Gửi bởi tuanvi261 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 20-05-2012, 09:39 PM
  4. Lập trình C Thắc mắc về toán tử luận lý trong C
    Gửi bởi nadugroup trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 01-09-2011, 08:32 AM
  5. Array.Sort() and Array.Reverse() sử dụng thế nào ạ
    Gửi bởi nguoirung1.6 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 19-12-2010, 03:23 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn