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à &* ( 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 ạ.

anon45952904 viết 01:42 ngày 01/10/2018

Hóng mãi chưa thấy bác nào giúp em!

#include <stdio.h>

void change(char y[])
{
    *y = *y + 1;
}
int main()
{
  int x = 10;
  change(&x);
  printf("%i", x);
  return 0;
}

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.

Tung Dao viết 01:45 ngày 01/10/2018

char y[] thật ra là pointer chứ hơi hướng gì nữa bạn
Pointer là cái lợi của C vậy mà tìm cách “lách qua” làm gì

Tung Dao viết 01:37 ngày 01/10/2018

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
anon45952904 viết 01:40 ngày 01/10/2018

À, 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?

Văn Dương viết 01:33 ngày 01/10/2018

[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.

Tung Dao viết 01:33 ngày 01/10/2018

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

Why?
C was developed when computers were much less powerful than they are today
and being very efficient with speed and memory usage was often not just
desirable but vital. The raw ability to work with particular memory locations
was obviously a useful option to have. A few tasks these days, such as
programming microcontrollers, still need this. However most modern programmers
do not need such fine control and the complications of using pointers make
programs less clear to understand and add to the ways in which they can be go
wrong. So why are pointers still used so much in C & its successor, C++?

The reason is that pointers are used to bodge into C some vital features
which are missing from the original language: arrays, strings, & writeable
function parameters. They can also be used to optimize a program to run faster
or use less memory that it would otherwise.
One of the complications when reading C programs is that a pointer could be
being used for any, several or all of these different reasons with little or no
distinction in the language so, unless the programmer has put in helpful
comments, one has to follow through the program to see what each pointer is
used for in order to work out why it is there instead of a plain simple
variable.
I will cover different the uses individually to keep it simple.

Người bí ẩn viết 01:35 ngày 01/10/2018

Ý 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

Văn Dương viết 01:43 ngày 01/10/2018

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á.

The Wind viết 01:35 ngày 01/10/2018

Yên tâm đi ! Hết Con trỏ sẽ đến cấp phát động ! Cứ từ từ mà quẩy

anon45952904 viết 01:46 ngày 01/10/2018

Cảm giác về những cửa ải phía chân trời…

Thành Nguyễn viết 01:39 ngày 01/10/2018

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

anon45952904 viết 01:39 ngày 01/10/2018

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

The WindKulteamRegular4h
Yên tâm đi ! Hết Con trỏ sẽ đến cấp phát động ! Cứ từ từ mà quẩy :joy:
Phương Trọng Lê viết 01:34 ngày 01/10/2018

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

Thành Nguyễn viết 01:43 ngày 01/10/2018

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.

anon45952904 viết 01:39 ngày 01/10/2018

giống tên và mình cũng đang học C đến đoạn đó

viết 01:33 ngày 01/10/2018

Sẽ thế nào nếu C không có Pointer?

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).

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

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ểu
int * (* (*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ớ).

anon45952904 viết 01:31 ngày 01/10/2018

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.

Tôn Uy Dũng viết 01:36 ngày 01/10/2018

Những thứ khó hơn con trỏ rất nhiều gồm những gì vậy bạn

Bài liên quan
0