hix hix không ai chỉ mình vậy?
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.
hix hix không ai chỉ mình vậy?
Bạn đọc lại ở trên đi đã, và đọc thêm bài viết này: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?
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!
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 đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
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 hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.
i[s] = *(i + s) = *(s + i) = s[i]
http://www.vninformatics.com/forum/?...014#1023395014 for more detail
Đố 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) ?
WoW ! Đây là cách giải thích hay nhất trong trường hợp này ! Y!Nguyên bản được gửi bởi TQN
![]()
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 !
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.
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.
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