Con trỏ là một bài rất khó hiểu trong Cơ sở lập trình và là một phần rất rất quan trọng trong ngôn ngữ C. Rất cảm ơn anh đã giải thích rất cặn kẽ phần này giúp cho em được rõ hơn❤❤
Nên nhớ khái niệm pass by reference chỉ có trong C++. Trong C ko hề có. Thậm chí khi bạn pass 1 pointer vào 1 function thì nó cũng chỉ là pass 1 bản copy của địa chỉ cái mà pointer đang giữ ko hơn ko kém.
Nội dung video : 00:00 : Khái niệm, khai báo và khởi tạo con trỏ. Toán tử địa chỉ và toán tử gải tham chiếu 12:50 : Truyền tham trị và truyền tham chiếu khi xây dựng hàm 20:00 : Mối quan hệ giữa mảng 1 chiều và con trỏ trong C 30:00 : Cấp phát động trong C
anh ơi khi gọi hàm mà khai báo mảng int a[] khi truyền mảng trong hàm main vào là truyền địa chỉ phần tử đầu tiên trong mảng vào hàm thì địa chỉ ấy gán là địa chỉ đầu tiên của mảng trong hàm à vậy mảng trong khi khai báo hàm cũng là 1 con trỏ à mong anh trả lời
Vậy anh có thể cho em hỏi: Ví dụ: int *a = new int(); delete a; a = nullptr; Vậy anh có thể cho em hỏi mục đích của việc gắn Null sau khi delete để làm gì ạ. Em cảm ơn. Có phải sau khi delete sẽ xóa ở bên HEAP nhưng con trỏ vẫn còn lưu trữ giá trị, nên phải gắn về null để tránh trường hợp, lỡ sử dụng lại con trỏ thì sẽ trỏ đến biến a ( cũ không ạ) Mong anh giải thích rõ giúp em chỗ này.
cho em hỏi có cách nào để khi thực thi chương trình thì mình có thể in ra dưới dạng tiếng Việt có dấu không? DevC của em khi soạn code thì các câu lệnh printf có thể hiên thị mã tiếng Việt, ví dụ: printf("Hãy nhập vào 1 số:"); nhưng khi compile and run thì nó in ra H├úy nhß║¡p v├áo 1 sß╗æ
ở 28:00, vòng lặp sẽ cho i chạy từ 0-4 (0, 1, 2, 3, 4) nhưng khi ta gọi a + i thì em bị không hiểu chỗ này. Nếu a là 1 địa chỉ và cho ra giá trị là 1 số nguyên, chẳng hạn như 6684172, e vẫn không hiểu khi chạy vòng lặp với a + i thì nó vẫn ra được dãy giá trị: 6684172, 6684176, 6684180, 6684184, 6684188, tại sao không phải là 6684172, 6684173, 6684174, 6684175, 6684176 (vì mỗi lần i tăng lên 1) vậy ạ?
Theo đn, con trỏ ptr kiểu int khi trỏ đến một biến m kiểu int sẽ lấy địa chỉ là số hiệu của byte đầu tiên trong dãy 4 byte dành cho biến m. Do vậy 2 biến kiểu int nằm liền kề nhau trong bộ nhớ (như case 2 phần tử mảng kiểu int có chỉ số liên tiếp) sẽ có địa chỉ cách nhau 4 byte. Có a = &a[0] , a đồng nhất với địa chỉ phần tử đầu tiên của mảng. Phép tính (a+1) gọi là phép tăng địa chỉ, không phải phép cộng số học thông thường, (a+1) sẽ chứa địa chỉ của phần tử mảng kế tiếp là &a[1] bằng với địa chỉ &a[0] cộng với 4. Tương tự (a+2) sẽ chứa địa chỉ phần tử &a[2].( &a[0] + 8).
anh ơi cho em hỏi bây giờ người ta thường chuộng sử dụng C++ hơn nhưng em tra các tài liệu họ thường dùng C và các video dạy đa số cũng là C, vậy nếu đang học c++ có nên học thêm C không
C++ chuộng hơn chứ, C++ được dùng rất nhiều trong giới lập trình thuật toán. Nếu trường e ko bắt học C a nghĩ em không cần học. Dành thời gian đó học java python hoặc thuật toán vs c++
Các bạn có thể cập nhật thông tin các khóa học và đăng ký học với mình tại website : 28tech.com.vn
anh ơi, cho em xin link bài tập phần ni với ạ
Con trỏ là một bài rất khó hiểu trong Cơ sở lập trình và là một phần rất rất quan trọng trong ngôn ngữ C. Rất cảm ơn anh đã giải thích rất cặn kẽ phần này giúp cho em được rõ hơn❤❤
Cảm ơn em chúc em học tốt
Chuẩn. Con trỏ mạnh mẽ mà max khó
e học mãi ko hiểu xem của a xong hiểu luôn quá đỉnh hehe c ơn a
tôi xem xong vẫn cấn cấn kh hiểu
quá hay a mong a sớm ra thêm video để hoàn thiện danh sách lập trình C
Ok e chỉ còn ít lí thuyết thôi
Bài giảng hay quá anh ơi , cảm ơn anh rất nhiều ❤
Nên nhớ khái niệm pass by reference chỉ có trong C++. Trong C ko hề có. Thậm chí khi bạn pass 1 pointer vào 1 function thì nó cũng chỉ là pass 1 bản copy của địa chỉ cái mà pointer đang giữ ko hơn ko kém.
Bài giảng quá hay
em dùng const rồi mà dùng con trỏ vẫn thay đổi giá trị a được, ảo thật đấy
Hay quá, đúng những cái hơi lơ mơ
:v phần này đáng lẽ master rồi chứ.
Nội dung video :
00:00 : Khái niệm, khai báo và khởi tạo con trỏ. Toán tử địa chỉ và toán tử gải tham chiếu
12:50 : Truyền tham trị và truyền tham chiếu khi xây dựng hàm
20:00 : Mối quan hệ giữa mảng 1 chiều và con trỏ trong C
30:00 : Cấp phát động trong C
quá hay ạ
Chưa xem đã bảo hay rồi :v
Mong anh ra thêm nhiều video ạ
Em đã học được hết chưa 🤪🤪🤪
a zai cho e xin lộ trinh nên học như nào cho người mới bắt đầu
Video này anh giải thích rõ hơn video c++ ạ
quá hay luôn anh ạ
ok em nhé :D
Hay lắm ạ
Cảm ơn em.
a giảng dễ hiểu lắm lun ạk
, cẻm ơn ank
🤓🤓🤓 thank em đã ủng hộ nha
Em cảm ơn thầy rất nhiềuu ạ
anh ơi khi gọi hàm mà khai báo mảng int a[] khi truyền mảng trong hàm main vào là truyền địa chỉ phần tử đầu tiên trong mảng vào hàm thì địa chỉ ấy gán là địa chỉ đầu tiên của mảng trong hàm à vậy mảng trong khi khai báo hàm cũng là 1 con trỏ à mong anh trả lời
Hay quá anh ưi
Ok Bình 😝😝😝
Vậy anh có thể cho em hỏi:
Ví dụ: int *a = new int();
delete a;
a = nullptr;
Vậy anh có thể cho em hỏi mục đích của việc gắn Null sau khi delete để làm gì ạ. Em cảm ơn.
Có phải sau khi delete sẽ xóa ở bên HEAP nhưng con trỏ vẫn còn lưu trữ giá trị, nên phải gắn về null để tránh trường hợp, lỡ sử dụng lại con trỏ thì sẽ trỏ đến biến a ( cũ không ạ) Mong anh giải thích rõ giúp em chỗ này.
Cho e hỏi với ạ , cái hàm malloc vs free em thấy nó đều in ra kq giống nhau , vậy 2 cái đó khác nhau ở đâu ạ ?
Malloc là cấp phát, free là giải phóng mà e
cấp phát động mảng hai chiều đi a
QUá Hay thầy ơi :)
a ơi sao em in địa chỉ của biến toàn bị lỗi vậy ạ ?
cho em hỏi có cách nào để khi thực thi chương trình thì mình có thể in ra dưới dạng tiếng Việt có dấu không? DevC của em khi soạn code thì các câu lệnh printf có thể hiên thị mã tiếng Việt, ví dụ: printf("Hãy nhập vào 1 số:"); nhưng khi compile and run thì nó in ra H├úy nhß║¡p v├áo 1 sß╗æ
Cái đó ko có quan trọng đâu em, đừng cố in tiếng Việt có dấu
anh ơi con trỏ khi ++ lên thì con trỏ trỏ tới địa chỉ của ô nhớ tiếp theo chứ không phải là cộng thêm 1 giá trị vào địa chỉ của ô nhớ đó đúng k anh
Đúng rồi, vì dụ mảng int mà em ++ thì nó nhảy 4 byte, tức di chuyển sang phần tử bên cạnh nó.
25:56 *b=a là sao v a,em chưa hiểu ạ
Tại a hiểu con trỏ rồi nên ms thấy dễ chứ lúc mới học chắc rụng mấy trăm cọng tóc á a
haha
calloc có thể dùng để tạo mảng đánh dấu tới 1 tỉ được không anh nhỉ
Được nhưng mà chạy trên máy của em thôi, trên các nền tảnh chấm bài online sẽ bị quá bộ nhớ
a ơi sau khi học dc cơ bản C rồi thì mình chuyển qua C++ hay sao ạ
A ko rõ cơ bản của em là ntn nên rất khó nói
@@28tech_ là những phần trong video ngôn ngữ c của a ấy ạ.
ở 28:00, vòng lặp sẽ cho i chạy từ 0-4 (0, 1, 2, 3, 4) nhưng khi ta gọi a + i thì em bị không hiểu chỗ này. Nếu a là 1 địa chỉ và cho ra giá trị là 1 số nguyên, chẳng hạn như 6684172, e vẫn không hiểu khi chạy vòng lặp với a + i thì nó vẫn ra được dãy giá trị: 6684172, 6684176, 6684180, 6684184, 6684188, tại sao không phải là 6684172, 6684173, 6684174, 6684175, 6684176 (vì mỗi lần i tăng lên 1) vậy ạ?
Theo đn, con trỏ ptr kiểu int khi trỏ đến một biến m kiểu int sẽ lấy địa chỉ là số hiệu của byte đầu tiên trong dãy 4 byte dành cho biến m. Do vậy 2 biến kiểu int nằm liền kề nhau trong bộ nhớ (như case 2 phần tử mảng kiểu int có chỉ số liên tiếp) sẽ có địa chỉ cách nhau 4 byte.
Có a = &a[0] , a đồng nhất với địa chỉ phần tử đầu tiên của mảng. Phép tính (a+1) gọi là phép tăng địa chỉ, không phải phép cộng số học thông thường, (a+1) sẽ chứa địa chỉ của phần tử mảng kế tiếp là &a[1] bằng với địa chỉ &a[0] cộng với 4. Tương tự (a+2) sẽ chứa địa chỉ phần tử &a[2].( &a[0] + 8).
Cho em hỏi đoạn a+i, anh bảo int thì mỗi địa chỉ trong mảng cách nhau 4 bit, mà mỗi a+i chỉ cách nhau 1 giá trị mà vẫn cho kết quả đúng ạ😅
4 byte nha em
anh ơi giúp em với giờ đề yêu cầu nhập dữ liệu màng nhưng lại ko đc phép cho biết trc số lượng phần tử thì phải làm sao ạ ?
nhập ntn
while(scanf("%d", &n) != -1){
xử lý n nhập được;
}
@@28tech_ em cảm ơn !
@@28tech_ để scanf bằng -1 khi nào ạ. Hay là mình phải tự đặt ra điều kiện ạ. Em cảm ơn ạ!
xong video này là hết lý thuyết rùi à anh. e k thấy video lý thuyết nx
a phong to cua so console sao vay a??
Em chỉ con chuột vào màn hình đó rồi lăn con chuột giữa ấy
anh ơi anh làm vid về mấy câu trắc nghiệm liên quan đến phần con trỏ này được k ạ
>
Anh lại ít làm dạng này.
@@28tech_ huhu từ code quá trắc nghiệm nó lạ lẫm lắm anh :
Anh ơi nên học java hay C ++ ạ
Tuỳ mục đích của em nữa , nếu bắt đầu em cứ học C++ cho quen hướng thủ tục trước
Em cảm ơn ạ
Anh làm thêm về phần đọc/ghi file đi anh
Uh còn chuỗi, struct nữa e
anh ơi làm thêm cấp phát động về phần new đi anh
thế nếu ko gán prt = &a thì 2 cái đó ko bằng nhau ạ🙃e hỏi ngu 1 chút ạ
ptr va a ko banbg nhau, nhung ptr vaf &a thi giong nhau
1 cai laf con tro 1 cai laf bien
anh ơi cho em hỏi bây giờ người ta thường chuộng sử dụng C++ hơn nhưng em tra các tài liệu họ thường dùng C và các video dạy đa số cũng là C, vậy nếu đang học c++ có nên học thêm C không
C++ chuộng hơn chứ, C++ được dùng rất nhiều trong giới lập trình thuật toán. Nếu trường e ko bắt học C a nghĩ em không cần học. Dành thời gian đó học java python hoặc thuật toán vs c++
Như mình theo mảng Software Embedded thì học C đây
a ƠI cái hàm malloc e viết giống a mà nó báo lỗi là malloc không được khai báo
Em thêm thư viện chứa nó vào nhé
anh ơi làm sao để xem sách theo từng phụ lục kia thế ạ ?
Em mở bằng foxit reader hay gì đó là có phần này mà
@@28tech_ dạ em cảm ơn
tài liệu anh trình chiếu tên là gì vậy ạ
Cuốn C how to programming em ạ
a làm về qhđ đi a
Còn lâu lắm mới làm e ơi
a ơi học c xong qua java được k ạ
được rồi em.
Cho em hỏi phần file trong c có video ko ạ
Anh chưa làm được em ạ, vài hôm nữa
em xin sách kia với ạ
con trỏ nếu nnhư để ý kĩ thì nó cx không khó lắm
anh ơi , e xem khóa học thấy có c và python thôi hả anh
Có đủ hết mà em 28tech.com.vn/
bài giảng hay, mà con trỏ khó hiểu quá
anh ơi, sao phần này không có bài tập ạ
Phần này bt thì nó ở danh sách liên kết em ạ
@@28tech_ anh cho em xin link với ạ
ok
20:07
anh cho em xin file pdf sách được ko ạ
Em tìm Introduction to C programming pdf là nó ra.
nghe tới đoạn mảng lú thật sự
37:00 . Trong C làm sao mà cấp phát được như thế kia. Cái số ô viết to quá nó tràn số đấy chứ. Kiến thức kém vcd
Xem kỹ đi bạn, ko cấp phát đc nên trả về NULL đó mình có check sau mà, gì mà nặng lời thế. 😁😁😁
nhép miệng ít thôi anh ơi
😂😂😂
???