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ố 14 kết quả

Đề tài: [C] Mảng 2 chiều, con trỏ đến con trỏ và cấp phát bộ nhớ động cho mảng 2 chiều

  1. #1
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Mặc định [C] Mảng 2 chiều, con trỏ đến con trỏ và cấp phát bộ nhớ động cho mảng 2 chiều

    Cho mình hỏi con trỏ là gì vậy?
    Con trỏ 1 chiều là gì?
    Con trỏ 2 chiều là gì?
    và có con trỏ n chiều hay không?
    cám ơn trước nha.

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    hix hix không ai chỉ mình vậy?

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Cho mình hỏi con trỏ là gì vậy?
    Con trỏ 1 chiều là gì?
    Con trỏ 2 chiều là gì?
    và có con trỏ n chiều hay không?
    Bạn đọc lại ở trên đi đã, và đọc thêm bài viết này:
    http://forums.congdongcviet.com/showthread.php?t=62

    Đơn giản hơn bạn hiểu như thế này:

    Con trỏ: nó là một biến, giá trị mà nó mang là một địa chỉ trong bộ nhớ của một biến nào đó.
    Con trỏ bậc 1: Con trỏ một chiều là con trỏ nó mang địa chỉ của một biến , mà biến đó không là một con trỏ.
    Con trỏ bậc 2: Là con trỏ mang địa chỉ của một biến, biến đó là một con trỏ một chiều.
    Con trỏ bậc n: Như bạn biết đó, con trỏ nó là một biến. Do đó nó cần đến một vùng nhớ để lưu trữ. Kiểu quản lý bộ nhớ thông dụng hiện nay là quản lý theo địa chỉ, chia ra thành các bit(hoặc byte). Do vậy ta luôn tìm được một con trỏ của một con trỏ bất kỳ. Việc ứng dụng con trỏ bậc n trong thực tế chỉ dùng cho các trường hợp đặc biệt. Bạn nên học C một thời gian, bạn sẽ tự hiểu ra những điều đó.

    Chúc thành công!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    09 2006
    Bài viết
    711

    i[s] = *(i + s) = *(s + i) = s[i]

  5. #5
    No Avatar
    sephiroth2m Khách

  6. #6
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Mặc định [C] Mảng 2 chiều, con trỏ đến con trỏ và cấp phát bộ nhớ động cho mảng 2 chiều

    Đố các bạn trong 2 trường hợp, compiler tạo mã ra sao, có như nhau không (đòi hỏi 1 chút kiến thức về ASM) ?

  7. #7
    No Avatar
    a4bk Khách

    Trích dẫn Nguyên bản được gửi bởi TQN
    i[s] = *(i + s) = *(s + i) = s[i]
    WoW ! Đây là cách giải thích hay nhất trong trường hợp này ! Y!
    Em thấy rất thú vị !
    Compiler trong 2 trường hợp chắc là sẽ dịch khác nhau ! Khác như thế nào hy vọng bác giải thích dùm !

  8. #8
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Các cậu đã biết về phép toán trên con trỏ :
    Tôi có p là con trỏ, a là một số nguyên.
    thì p+a là một con trỏ và a+p cũng là con trỏ hai con trỏ này cùng trỏ về một địa chỉ,thì thi ta dùng toán tử lấy giá trị * vùng nhớ của con trỏ thì tất nhiên chúng đã trỏ về một vùng nhớ không lẽ một vùng nhớ trong một thời điểm lại chứa hai giá trị giống nhau.

    À quên mất khi trình biên dịch gặp p[a] thì nó sẽ hiểu là *(p+a).
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 03-10-2006 lúc 07:38 PM.

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Trong 2 trường hợp, với các compiler # thì tui không biết, nhưng tui thử với C++Builder, VC++6, 2003, 2005 thì compiler đều sinh mã như nhau cả.
    Về phương diện mã máy, không có khái niệm con trỏ, chỉ là 2 DWORD cộng nhau thôi.

  10. #10
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Tui nghĩ thì các dòng VC có thể giống nhau nhưng C++Buider thì có khác. Nhưng không biết bạn kiểm tra khi build project như thế nào, Release hay Debug. Ở debug thì chúng có thể giống nhau, nhưng release thì lại khác, vì khi build release trình dịch thực hiện quá trình tối ưu code (code optimization). Mà giải thuật optimize thì mỗi hãng làm một cách.

    Tuy nhiên chuyện sinh mã ra sao cũng không cần quan tâm nhiều, vì có mấy khi dùng đến kiến thức này, trừ khi bạn đang học tập bẻ khóa phần mềm

    vấn đề khác về con trỏ:
    int*p, p2;

    p2 = p + 2;
    cout<<((long)p2 - (long)p)<<endl;

    p2 = p;
    p++;
    cout<<((long)p - (long)p2)<<endl;

    các bạn nghĩ nó in ra số như thế nào

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