Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Con trỏ và mảng nhiều chiều, (float*)a+i*50+j có ý nghĩa gì?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    12

    Unhappy Con trỏ và mảng nhiều chiều, (float*)a+i*50+j có ý nghĩa gì?

    mình vừa đọc qua phần này, nhưng có 1 chỗ mình không hiểu và cần mọi người giải thích đó là trọng đoạn code:
    C Code:
    1. #include "stdio.h"
    2. #include"conio.h"
    3. int main(){
    4.     float a[50][50];
    5.     int m,n,i,j;
    6.     printf("\nVao m va n: ");
    7.     scanf("%d%d",&m,&n);
    8.     for(i=0;i<=m;++i)
    9.     for(j=0;j<=n;++j)
    10.     {
    11.         printf("\n a[%d][%d]=",i,j);
    12.         scanf("%f",(float*)a+i*50+j);
    13.     }
    14.         getch();
    15. }

    mình không hiểu
    Code:
    (float*)a+i*50+j
    hoạt động như thế nào,,,
    cảm ơn mọi người...

  2. #2
    Ngày gia nhập
    01 2011
    Bài viết
    11

    con trỏ trỏ vào mảng 2 chiều thì giá trị xác định ko phải là a + i + j như bên mảng 1 chiều, mà dùng công thức a + i*N +j, N là số hàng của mảng
    Code is more than binary. Its poetry

  3. #3
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi rimberry Xem bài viết
    ...

    mình không hiểu
    Code:
    (float*)a+i*50+j
    hoạt động như thế nào,,,
    cảm ơn mọi người...
    Trong đoạn code trên thì nó tương đương với &a[i][j], lý do thì neky đã giải thích. Cũng có thể viết a[i] + j (tương đương)
    Viết &a[i][j] gọn và dễ hiểu hơn, viết như cách trên theo mình nghĩ chỉ có 1 cái hơn là nhìn có vẻ nguy hiểm hơn thôi (ý kiến cá nhân, sai các bạn cứ ném đá).

  4. #4
    Ngày gia nhập
    01 2011
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Trong đoạn code trên thì nó tương đương với &a[i][j], lý do thì neky đã giải thích. Cũng có thể viết a[i] + j (tương đương)
    Viết &a[i][j] gọn và dễ hiểu hơn, viết như cách trên theo mình nghĩ chỉ có 1 cái hơn là nhìn có vẻ nguy hiểm hơn thôi (ý kiến cá nhân, sai các bạn cứ ném đá).
    Chắc là do bạn rimberry học c từ tài liệu cũ, trong 1 số tài liệu và Complier cũ thì để nhập 1 số thực mà dùng toán tử &a[i][j] đôi khi bị lỗi và cách khắc phục 1 là dùng con trỏ, 2 là gán cho 1 biến tạm rồi mới gán vào phần tử a[i][j]
    Code is more than binary. Its poetry

  5. #5
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    tại sao một số chuẩn C ko cho lấy địa chỉ trực tiếp trong mảng 2 chiều nhỉ ?

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Mặc định Con trỏ và mảng nhiều chiều, (float*)a+i*50+j có ý nghĩa gì?

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    tại sao một số chuẩn C ko cho lấy địa chỉ trực tiếp trong mảng 2 chiều nhỉ ?
    Ví dụ chuẩn C nào vậy? Nếu đã nói là "chuẩn" thì C/C++ cũng không có quá nhiều chuẩn đâu, mà mình chưa bao giờ nghe nói đến cái này?

  7. #7
    Ngày gia nhập
    01 2011
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    tại sao một số chuẩn C ko cho lấy địa chỉ trực tiếp trong mảng 2 chiều nhỉ ?
    Không phải không cho phép lấy địa chỉ trực tiếp trong mảng 2 chiều, mà các complier cũ nếu gán trực tiếp giá trị thực vào địa chỉ a[i][j] thường bị lỗi
    Code is more than binary. Its poetry

  8. #8
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    Trích dẫn Nguyên bản được gửi bởi nekyvn Xem bài viết
    Không phải không cho phép lấy địa chỉ trực tiếp trong mảng 2 chiều, mà các complier cũ nếu gán trực tiếp giá trị thực vào địa chỉ a[i][j] thường bị lỗi
    vấn đề là tại sao ?

    Đã check lại thông tin, ko có chuẩn nào hạn chế điều này, chỉ là do trình dịch ko hỗ trợ.
    Nhưng đến bây giờ vẫn có thầy dạy tin đại cương bảo ko dc lấy địa chỉ mảng 2 chiều trong scanf. Cổ hủ.

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    vấn đề là tại sao ?

    Đã check lại thông tin, ko có chuẩn nào hạn chế điều này, chỉ là do trình dịch ko hỗ trợ.
    Nhưng đến bây giờ vẫn có thầy dạy tin đại cương bảo ko dc lấy địa chỉ mảng 2 chiều trong scanf. Cổ hủ.
    Tin đại cương người ta dạy Turbo C chứ đâu có dạy C.

  10. #10
    Ngày gia nhập
    01 2011
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    vấn đề là tại sao ?

    Đã check lại thông tin, ko có chuẩn nào hạn chế điều này, chỉ là do trình dịch ko hỗ trợ.
    Nhưng đến bây giờ vẫn có thầy dạy tin đại cương bảo ko dc lấy địa chỉ mảng 2 chiều trong scanf. Cổ hủ.
    Đọc kỹ câu trả lời rồi hay comment, Compile là trình dịch. Từ đầu topic mình không hè nói không lấy được địa chỉ của mảng thực 2 chiều
    Code is more than binary. Its poetry

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

  1. Trả lời: 0
    Bài viết cuối: 02-08-2011, 03:26 PM
  2. giải thích giùm mình lỗi cannot convert from 'float' to 'float*'
    Gửi bởi hoanghiep9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 06-05-2011, 08:20 PM
  3. Kỹ thuật C Dạng khai báo phức tạp int (*f(float (*)(long), char *))(double); có ý nghĩa gì?
    Gửi bởi icanfeel trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 26-11-2010, 05:08 PM
  4. Mảng 1 chiều số thực trên C | Lỗi C2296: '%' : illegal, left operand has type 'float'
    Gửi bởi minhtribt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 07-07-2009, 08:41 PM
  5. cannot convert float(*)[] to float* for argument '1' to void
    Gửi bởi vanphamvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-12-2008, 05:12 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