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

Đề tài: Mảng (một chiều ) của mảng

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Mảng (một chiều ) của mảng

    Trong C,mảng hai chiều được coi là mảng(một chiều) của mảng.

    Ví dụ như :Mảng a[3][3];

    1 2 3
    4 5 6
    7 8 9
    Vậy thì mảng ( một chiều) của mảng có phải là các phần tử :{ 1 , 4 , 7 } không ?

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    thực chất mảng 2 chiều là 1 mảng địa chỉ hằng(con trỏ hằng).

    mỗi phần tử của mảng chứa địa chỉ của phần tử đầu tiên của mảng con.

    vd: bạn khai báo mảng 2 chiều int A[][20];
    thì bạn xin cấp phát một mảng 1 chiều gồm tối đa 20 (phần tử) con trỏ.
    Mỗi phần tử trong mảng sẽ trỏ tới một phần tử của mảng con mà bạn thêm vào sau này.

    đó cũng là nguyên nhân tại sao bạn phải khai báo là int A[][MAX] trong khai báo đầu vào của hàm, mà không cần khai báo int A[MAX1][MAX2];

    nên nó mới nói là mảng 2 chiều là mảng 1 chiều của mảng.

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    443

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Trong C,mảng hai chiều được coi là mảng(một chiều) của mảng.

    Ví dụ như :Mảng a[3][3];

    1 2 3
    4 5 6
    7 8 9
    Vậy thì mảng ( một chiều) của mảng có phải là các phần tử :{ 1 , 4 , 7 } không ?
    Không. Mảng (một chiều) của mảng là mảng hai chiều nói trên, tức là cả 9 phần tử nói trên.

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Trích dẫn Nguyên bản được gửi bởi zkday2686 Xem bài viết
    thực chất mảng 2 chiều là 1 mảng địa chỉ hằng(con trỏ hằng).

    mỗi phần tử của mảng chứa địa chỉ của phần tử đầu tiên của mảng con.

    vd: bạn khai báo mảng 2 chiều int A[][20];
    thì bạn xin cấp phát một mảng 1 chiều gồm tối đa 20 (phần tử) con trỏ.
    Mỗi phần tử trong mảng sẽ trỏ tới một phần tử của mảng con mà bạn thêm vào sau này.

    đó cũng là nguyên nhân tại sao bạn phải khai báo là int A[][MAX] trong khai báo đầu vào của hàm, mà không cần khai báo int A[MAX1][MAX2];

    nên nó mới nói là mảng 2 chiều là mảng 1 chiều của mảng.
    Theo bạn lí giải thì phải khai báo là : A[20][] chứ vì theo mình thì mảng 1 chiều ở đây chính là số hàng
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Trong C,mảng hai chiều được coi là mảng(một chiều) của mảng.

    Ví dụ như :Mảng a[3][3];

    1 2 3
    4 5 6
    7 8 9
    Vậy thì mảng ( một chiều) của mảng có phải là các phần tử :{ 1 , 4 , 7 } không ?
    Có thể nói a là mảng mà mổi phần tử của nó là một dãy 3 số nguyên. Ở đây có thể xem các "phần tử" của "mảng một chiều" a là {1, 2, 3}; {4, 5, 6}; {7, 8, 9};
    /* The thing that I think is the thing that I do. */

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    443

    Mặc định Mảng (một chiều ) của mảng

    Nói cho chinh xác thì trong C, mảng nào cũng đều là mảng 1 chiều cả. Mảng T a[n] có các phần tử kiểu T.

    Và nói chính xác thì nếu xem mảng của mảng là "mảng 2 chiều", kiểu phần tử vẫn là kiểu được viết tường minh trong khai báo mảng. Mảng T a[m][n] là mảng 1 chiều có các phần tử kiểu T[n], tức là một kiểu mảng có các phần tử kiểu T. Không bao giờ T a[m][n] lại có các phần tử kiểu T* cả.

    Không nên lầm lẫn với cái thường gọi là mảng động 2 chiều, một kỹ thuật của ngôn ngữ C để thực hiện các "mảng 2 chiều" T a[m][n] có kích thước m,n là biến số (hơn là hằng số) nhờ một mảng m phần tử kiểu T* và một mảng m*n phần tử kiểu T.


    P/S. Bộ biên dịch gcc cho phép khai báo mảng "động" 2 chiều trực tiếp bằng khai báo

    T a[m][n]; // m, n là biến số nguyên xác định trước khi triển khai khai báo này. Mảng a được cấp bộ nhớ trên stack.

    Không rõ đây có phải là tính năng được qui định bởi chuẩn C, chuẩn C++ hay chỉ là một tính năng riêng của gcc?
    Đã được chỉnh sửa lần cuối bởi Ada : 13-08-2008 lúc 05:36 PM.

  7. #7
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Trích trong sách:
    Code:
    Với khai báo float a[2][3] thì
     a là mảng mà mỗi phần tử của nó là một dãy 3 số thực (một hàng của bảng).Vì vậy
    a                  trỏ tới đầu hàng thứ nhất (phần tử a[0][0])
    a+1                trỏ tới đầu hàng thứ hai (phần tử a[1][0])
    Vậy thì các phần tử của mảng một chiều mình nói ở trên phải là::{ 1 , 4 , 7 } chứ vì
    - a trỏ tới đầu hàng thứ nhất (phần tử a[0][0] nghĩa là 1 trong ví dụ của mình)
    -a+1 trỏ tới đầu hàng thứ hai (phần tử a[1][0] nghĩa là 4 trong ví dụ của mình)


    Vậy thì

  8. #8
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    443

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Trích trong sách:
    Code:
    Với khai báo float a[2][3] thì
     a là mảng mà mỗi phần tử của nó là một dãy 3 số thực (một hàng của bảng).Vì vậy
    a                  trỏ tới đầu hàng thứ nhất (phần tử a[0][0])
    a+1                trỏ tới đầu hàng thứ hai (phần tử a[1][0])
    Vậy thì các phần tử của mảng một chiều mình nói ở trên phải là::{ 1 , 4 , 7 } chứ vì
    - a trỏ tới đầu hàng thứ nhất (phần tử a[0][0] nghĩa là 1 trong ví dụ của mình)
    -a+1 trỏ tới đầu hàng thứ hai (phần tử a[1][0] nghĩa là 4 trong ví dụ của mình)
    Về địa chỉ thì đúng là như thế:
    a[0] là địa chỉ của số 1
    a[1] là địa chỉ của số 4
    a[2] là địa chỉ của số 7

    Còn về mảng thì ở đây chỉ có các mảng:

    a[0] == {1,2,3}

    a[1] == {4,5,6}

    a[3] == {7,8,9}

    a == { {1,2,3},{4,5,6},{7,8,9} }

    Tất cả đều là mảng 1 chiều.

    Còn {1,4,7} không phải là mảng và không có cách nào truy nhập đến nó như 1 đối tượng duy nhất, vì ngôn ngữ C chỉ có mảng 1 chiều.

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 AM

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