30/09/2018, 23:30
Sẽ thế nào nếu C không có Pointer?
Sẽ thế nào nếu C không có Pointer?
Có thể sử dụng 2 operators là &
và *
( hoặc các biện pháp có sẵn khác trong C) để thay pointer hoàn toàn được không?
Các bác cho em hỏi 02 câu trên với ạ.
Bài liên quan
Hóng mãi chưa thấy bác nào giúp em!
Bác nào có cách “lách qua” pointer khác không ạ? Con
char y[]
này vẫn có hơi hướng pointer.char y[]
thật ra là pointer chứ hơi hướng gì nữa bạnPointer là cái lợi của C vậy mà tìm cách “lách qua” làm gì
Bạn có thể tham khảo những cách dưới để thay đổi giá trị của biến
int x
:x = 10;
=> gán trực tiếp*(&x) = 10;
=> gán gián tiếp qua địa chỉ, thực ra cũng dùng 1 con trỏ, nhưng ở đây không tường minh thôiÀ, mình không định lách.
Mình thấy đâu đó viết “nắm được pointer là gần như nắm đc C/C++”.
Học nó thấy loằng ngoằng , thay vì học theo cách “bỏ nó vào” thì mình thử “vứt nó ra” xem sao.
Cảm ơn câu trả lời trên của bạn. Cho mình hỏi thêm.
Nếu mình hiểu tường minh là phải “viết ra” thì nhiều ngôn ngữ lập trình khác ( hoặc tất cả) có lẽ cũng phải có pointer ( nhưng không tường minh hoặc “behind the scene” ) đúng không bạn?
[quote] Nắm được pointer là gần như nắm đc C/C++".
[/quote]
Có thể mình chưa đủ tầm để hiểu hoặc cũng có khi là kiểu phát biểu chơi chơi nên mình không thấy nó đúng.
Nhiều ngôn ngữ vẫn dùng khái niệm pointer nhưng nó có cung cấp ra ngoài để lập trình viên sử dụng không là một chuyện khác, ví dự như Java vẫn có khái niệm pointer nhưng tất cả đều dc handle âm thầm không cần sự can thiệp của lập trình viên.
Có thể nói pointer là khái niệm cơ bản trong mọi ngôn ngữ lập trình, vì bản chất vùng nhớ là các ô địa chỉ và cần một cách nào đó để tham chiếu đến ô địa chỉ đó, đó là pointer.
http://duramecho.com/ComputerInformation/WhyCPointers.html
Ý của câu này có nghĩa là: Mức độ thành thạo về C của 1 người được đánh giá qua sự thành thạo về con trỏ.
Đó là ý của thầy ĐBP hay thầy NTTMK gì ấy
Nên có thể nói đùa 1 câu là: Nếu 1 lập trình viên C không biết con trỏ thì coi như người đó chưa biết về ngôn ngữ C
Thầy nào thì không biết nhưng kể cả thông thạo mọi ngõ ngách của con trỏ trong C, hay C++ hay ngôn ngữ nào đó nữa thì cũng chưa chắc làm được cái gì .
Có thể tôi đang suy luận theo hướng thực dụng hoá.
Yên tâm đi ! Hết Con trỏ sẽ đến cấp phát động ! Cứ từ từ mà quẩy
Cảm giác về những cửa ải phía chân trời…
Em cũng đang học C và cảm thấy con trỏ đúng là ác mộng, nhất là mấy cái struct phức tạp dùng pointer nhìn mà bối rối vch T.T
Về pointer mình thấy Head_First_C đọc có vẻ đc nạ.
Về struct thì bạn đọc cả Head_First_C và cả cái này nữa http://fresh2refresh.com/c-programming/c-struct-memory-allocation/ cũng có vẽ đc.
Cần thêm nữa thì mình chưa bít
Nói chung trong C chức năng của pointer vẫn chưa thể hiện mạnh mẽ bằng trong C++ đâu, cứ làm đi rồi sẽ quen, pointer có khả năng gây nghiện đấy . Nghiện tới mức mà nếu đọc code c++ mà k có pointer trong đó bạn sẽ chẳng muốn đọc lun ấy
tks a. Em cũng đang đọc head first c (đến chỗ struct vs linked list r). Về pointer em thấy xem mấy video trên youtube có vẻ dễ hiểu hơn đọc sách.
giống tên và mình cũng đang học C đến đoạn đó
C là ngôn ngữ
pass by value
( không córeference
như C++), nếu không có pointer bạn sẽ không thể giải quyết được những trường hợp cần truyền địa chỉ của đối tượng vào hàm (để đi ra khỏi hàm đối tượng có thể mang giá trị khác).Bạn đang hiểu nhầm.
&
(trong trường hợp bạn nêu) là toán tử địa chỉ,*
là toán tử dereference, cái hai đều dùng (liên quan mật thiết) với Pointer, bạn dùng chúng là bạn dùng pointer rồi, chúng đâu phải là biện pháp thay thế. [quote=“thanhpv, post:2, topic:33660”]Bác nào có cách “lách qua” pointer khác không ạ? Con char y[] này vẫn có hơi hướng pointer.
[/quote]
y
ở đây là một pointer. [quote=“thanhpv, post:5, topic:33660”]Học nó thấy loằng ngoằng
[/quote]
pointer
chỉ là một chuyện khá nhỏ nếu người ta không muốn cố tình đố vui kiểuint * (* (*fp1) (int) ) [10];
là gì ? (con trỏ hàm fp1, trỏ tới hàm có 1 tham số kiểu int và trả về 1 con trỏ trỏ tới một mảng chứa 10 pointer kiểu int).pointer khó, mình nghĩ là một stereo type nên bị dẹp bỏ để người mới học tự tin đạp qua nó để mà tiến tới vô số thứ ở phía sau của C , C++. Nói chung bạn muốn theo đuổi C, C++ để kiếm tiền thì bạn cần phải gặp nhiều thứ thật sự khó hơn nó rất nhiều, nếu bạn mới đến pointer đã thấy khó thì con đường cũng còn khá dài.
Ý tưởng tìm cách thay thế hoàn toàn pointer của bạn cũng rất hay Thực tế trong nhiều ứng dụng nhúng cần sự an toàn cao họ không cho phép developer dùng pointer vì khó kiểm soát và kiểm thử. Cá nhân mình thì khuyên càng hạn chế dùng pointer càng tốt và cấp phát động thì càng nên hạn chế tối đa ( view của một người nằm ở lớp dưới, phải tiết kiệm, quản lý hiệu quả từng ô nhớ).
Rất cảm ơn bạn!
Mình nghĩ những người mới bắt đầu bước vào một ngôn ngữ thì rất cần những chia sẻ kinh nghiệm để biết tập trung vào những cốt lõi của ngôn ngữ đang học.
Những thứ khó hơn con trỏ rất nhiều gồm những gì vậy bạn