int arr[] = { 1,2,3,4,5 }; int* ptr = arr; int i; for (ptr = arr; ptr < arr + 5; ptr++ ) { printf("%d ", *(ptr)); } Em tham khảo 1 số video khác thì có thể làm theo cách này ạ ptr khởi tạo với giá trị ban đầu là địa chỉ của phần tử đầu tiên của mảng arr, và ptr sẽ chay khi giá trị của ptr vẫn nhỏ hơn địa chỉ cuối cùng của mảng arr
Anh ơi, theo em được biết thì địa chỉ của các phần tử trong mảng cách nhau 1 khoảng đúng bằng kích thước của kiểu dữ liệu đó, như trong video thì các địa chỉ của a[0], a[1]... cách nhau 4 đơn vị. Vậy sao *(ptr+i) vẫn đúng ạ, em tưởng là *(ptr+i*sizeof(int)) chứ ạ? Cảm ơn anh.
5 лет назад
mặc đinh nó coi ptr + i trong đó ptr là con trỏ thì kết quả sẽ trỏ tới vị trí các ptr cũ i ô nhớ
Đề bài là viết các hàm: -nhập x, kiểm tra trong mảng có phần tử nào bằng x thì gán bằng 0 -nhập k, xóa phần tử ở vị trí thứ k trong mảng. Em hỏi là làm sao để hàm xoa_mang() của em xoá mảng ban đầu em nhập. Vì em chạy hàm ktra_mang() trước nên nó lấy luôn cái mảng sau khi sửa đấy để xóa,em muốn lấy cái mảng ban đầu nhập để xóa ý. GIÚP E VỚI,EM CẢM ƠN NHIỀU Ạ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include #include int nhapN(){ int n; do{ printf("nhap n="); scanf("%d",&n); if(n30){ printf("nhap sai, nhap lai n="); scanf("%d",&n); } }while(n30); return n; } void nhapmangB(int B[],int n){ for(int i=0;i
Không biết ông còn cần không nhưng theo tôi hiểu thì đó là vì ông cần in ra giá trị ở những ô nhớ kế tiếp, phần ptr + i sẽ làm địa chỉ lấy giá trị tăng lên còn dấu * ở ngoài là để lấy giá trị của ô nhớ đó, vì suốt vòng lặp chỉ có giá trị của i là tăng lên còn của ptr thì không thay đổi nên nó sẽ cho ra kết quả đúng
Anh cho em hỏi, anh có tài liệu chi tiết về phần con trỏ và mảng(những cách truy xuất mảng 1 và 2 chiều sử dụng con trỏ theo những cách chuẩn nhất) không ạ? cho em xin với, em tham khảo nhiều blogs, mỗi chổ làm 1 khác nên giờ hơi rối ạ
Đối với con trỏ và mảng thì không cần dùng dâu & vì giá trị đã được lưu vào địa chỉ của con trỏ hoặc của mảng. Bạn dùng & trước mảng khi mảng đó khai báo giá trị phần tử riêng lẻ trong mảng. VD: bạn có 1 mảng 10 phần tử (arry[10]) khi bạn cần khai báo phần tử thứ 5 arry[5] của mảng 10 phần tử thì bạn sẽ để dấu & trước mảng này: scanf("%d",&arrayy[5]);!!!
A ơi cho e tại sao lúc in địa chỉ %x lại để ptr mà lúc in giá trị %5d lại để *ptr ạ? Có gì khá nhau ạ?
7 лет назад+2
theo định nghĩa thì con trỏ là biến mà giá trị chứa trong nó là địa chỉ của biến khác. in cái địa chỉ của biến mà nó chứa thì chỉ cần ptr, còn chui vào địa chỉ đấy(nói cách khác là tìm tới tận chỗ của biến mà con trỏ trỏ tới ) để tìm giá trị thực sự tồn tại/ chứa trong biến đó thì phải dùng *ptr
anh ơi cho em hỏi: *p++ trong chương trình ví dụ kia có ý nghĩa gì ạ? em cảm ơn! #include #include void main() { int a = 6; int *p = &a; for (; *p < 15; *p++){ printf("%3d", *p); } _getch(); }
7 лет назад
Dung Van tăng giá trị tại vị trí chứa trong con trỏ lên 1
anh này dạy hay vl thề
int arr[] = { 1,2,3,4,5 };
int* ptr = arr;
int i;
for (ptr = arr; ptr < arr + 5; ptr++ )
{
printf("%d ", *(ptr));
}
Em tham khảo 1 số video khác thì có thể làm theo cách này ạ
ptr khởi tạo với giá trị ban đầu là địa chỉ của phần tử đầu tiên của mảng arr, và ptr sẽ chay khi giá trị của ptr vẫn nhỏ hơn địa chỉ cuối cùng của mảng arr
chỉ dẫn rất hay, lời rõ, đẹp, cám ơn bạn rất nhiều
thanks
for (; ptr
muốn học khóa học thì kiểu gì ạ
E vào trang https:braniumacademy.net xem nhé
@ anh ơi ko có bài tập ạ
em thấy có lý thuyết thôi ạ
bài này hiểu hơn hẳn rồi a ạ :D
oke nhé
sao thầy mình dạy con trỏ là %p nhỉ?
%p, %x đều ok. chi tiết tham khảo ví dụ: www.tutorialspoint.com/difference-between-p-and-x-in-c-cplusplus
mỗi máy thì địa chỉ có thể khác nhau hay sao ạ
Đúng r e
anh ơi anh làm thế nào để bôi đen rồi bấm cái là nó ra một loạt các dấu // vậy ạ
Trần Ngọc Dự ctrl space
@ thanks anh
2:21 sao đoạn khởi tạo như clip trc thì phải khai báo là int *ptr = &arr. Sao bh lại không có dấu ''và'' nữa vậy a?
Do mảng bản chất là con trỏ nên e k có & trước arr
Vì sao khi scanf();một mảng kí tự nào đó ta lại không cần kí tự &trước tên biến vậy mọi người?
Vì tên mảng là con trỏ nhé e
@ vì sao con trỏ lại không có & vậy thầy?
Vì bản thân con trỏ chứa địa chỉ rồi e
À vâng, thầy làm mấy cái hàm memchr();. . . trong thư viện string.h đi. Em xem trên mạng chả hiểu người ta nói gì
Anh cho em hỏi là bôi đen sau bấm cái gì để toàn bộ phần bôi đen trở thành chú thích ( comment ) ạ
Ctrl /
anh ơi cho em hỏi nếu em học hết C rồi học kháo cấu trúc dữ liệu và giải thuật rồi em sẽ học những gì tiếp theo ạ
em muốn theo hướng AI a ạ:V
Anh ơi, theo em được biết thì địa chỉ của các phần tử trong mảng cách nhau 1 khoảng đúng bằng kích thước của kiểu dữ liệu đó, như trong video thì các địa chỉ của a[0], a[1]... cách nhau 4 đơn vị. Vậy sao *(ptr+i) vẫn đúng ạ, em tưởng là *(ptr+i*sizeof(int)) chứ ạ? Cảm ơn anh.
mặc đinh nó coi ptr + i trong đó ptr là con trỏ thì kết quả sẽ trỏ tới vị trí các ptr cũ i ô nhớ
Đề bài là viết các hàm:
-nhập x, kiểm tra trong mảng có phần tử nào bằng x thì gán bằng 0
-nhập k, xóa phần tử ở vị trí thứ k trong mảng.
Em hỏi là làm sao để hàm xoa_mang() của em xoá mảng ban đầu em nhập.
Vì em chạy hàm ktra_mang() trước nên nó lấy luôn cái mảng sau khi sửa đấy để xóa,em muốn lấy cái mảng ban đầu nhập để xóa ý.
GIÚP E VỚI,EM CẢM ƠN NHIỀU Ạ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include
#include
int nhapN(){
int n;
do{
printf("nhap n=");
scanf("%d",&n);
if(n30){
printf("nhap sai, nhap lai n=");
scanf("%d",&n);
}
}while(n30);
return n;
}
void nhapmangB(int B[],int n){
for(int i=0;i
liệu có ép kiểu dữ liệu cho con trỏ đc không ạ ?
có, e tìm hiểu con trỏ void
cho mk hỏi là khi chạy chương trình thì sao arr = &arr z ad???
bản chất của mảng là con trỏ nên nó cho phép như vậy nhé
@ ad giải thích rõ hơn đc ko ???
Cho em hỏi %5d có tác dụng gì ạ
ruclips.net/video/welAtSfiyok/видео.html
anh ơi đổi kiểu phần tử char a[i] of array sang kiểu int ntn ạ
em dùng con trỏ đến lúc đổi nó ko chạy
int number = arr[i] - '0';
@ mấy điều này trên trường thây cô ko dạy nhỉ chủ yêu đọc tài liệu à anh
@@it4.080 không phải mọi thứ e đều có thể học ở trường. Hãy chịu khó google có hết các câu trả lời
vâng em cảm ơn anh
@@it4.080 oke
Anh triệu ơi , anh cho em hỏi dòng 20 tại sao mình *ptr mà còn + i làm gì vậy anh, em hông hiểu mong anh giải thich giúp em , em cảm ơn a trc ạ
Khoa Nguyễn Trần Đăng nội dung này đang nói về con trỏ và mảng mà
Không biết ông còn cần không nhưng theo tôi hiểu thì đó là vì ông cần in ra giá trị ở những ô nhớ kế tiếp, phần ptr + i sẽ làm địa chỉ lấy giá trị tăng lên còn dấu * ở ngoài là để lấy giá trị của ô nhớ đó, vì suốt vòng lặp chỉ có giá trị của i là tăng lên còn của ptr thì không thay đổi nên nó sẽ cho ra kết quả đúng
%x là gì vậy ạ
mew con in giá trị hệ 16
@ anh đi làm về trễ hay sao giờ này rep ạ?
Khi nào rảnh a rep
em cảm ơn anh
Con trỏ khó nhất trong ngôn ngữ C đúng ko a
Int 2 byte mà anh?
tùy hệ điều hành nhé e
32 bit thì 2 byte, 64 bit 4 byte
ptr++ là chuyển ô nhớ này qua ô nhớ liền kề
ptr++ = ptr +(1*4)
Thì có nghĩa là 2 đại chỉa liên tiếp cách nhau 4 byte đúng k anh :))
Đúng vậy
@ tại sao chương trình lại dịch ++ thành +4 ạ? Hay nó là con trỏ nên chương trình tự hiểu vậy a?
@@thangduong7179 mặc định ++ sẽ cộng thêm 1 lượng bằng độ lớn của kiểu dữ liệu của con trỏ
Hello
ô vuông trước dấu bằng dòng 5 ạ
Dũng Võ Thế nó trên bàn phím ấy e.
Anh cho em hỏi, anh có tài liệu chi tiết về phần con trỏ và mảng(những cách truy xuất mảng 1 và 2 chiều sử dụng con trỏ theo những cách chuẩn nhất) không ạ? cho em xin với, em tham khảo nhiều blogs, mỗi chổ làm 1 khác nên giờ hơi rối ạ
Thai Hung Nguyen a chỉ có tài liệu tiếng Anh thôi
a ơi phút 6:08 a ấn kiểu gì mà nó ra 3 cái dòng đó có 2 gạch ở đầu v ạ
ROS Việt Ctrl /
Anh giải thích cho em cái %x đi ạ. Đoạn ở 2:04 á
%x là hiển thị địa chỉ dạng hệ cơ số 16
anh cho e hỏi tại sao lúc gán giá trị cho %x trong câu lệnh printf lúc thì anh dùng dấu "&" cho giá trị gán lúc thì lại không thế ạ
Đối với con trỏ và mảng thì không cần dùng dâu & vì giá trị đã được lưu vào địa chỉ của con trỏ hoặc của mảng. Bạn dùng & trước mảng khi mảng đó khai báo giá trị phần tử riêng lẻ trong mảng. VD: bạn có 1 mảng 10 phần tử (arry[10]) khi bạn cần khai báo phần tử thứ 5 arry[5] của mảng 10 phần tử thì bạn sẽ để dấu & trước mảng này: scanf("%d",&arrayy[5]);!!!
anh ơi anh có thể làm thêm video về phần cấp phát bộ nhớ động được không ạ .. em chưa hiểu chỗ đó lắm
cảm ơn anh nhiều... bài giảng anh rất tuyệt
huynh viet phải cuối tháng a mới làm được. Hiện a đang phải tạm dừng update
ok anh... chúc anh thành công và cho nhiều video hay hơn nữa nhé
huynh viet ok e
5:29 em thắc mắc là ko cần const cho ptr hả a? hay mỗi vòng for như vậy giá trị nó ko thay đổi vì nó là con trỏ ạ
Dạ em không biết chỗ nào ạ
Dũng Võ Thế cạnh phím P
sao em bam ctll +? lai k boi dc a nhi
cụ thể e định làm cái gì? e phải chọn vùng code muốn comment sau đó thao tác trên mới có tác dụng
Ý e là làm nhưa vậy nhưng thao tác k dc noa ra moi 1 gạch
cho em hỏi ơ vuông ở câu 5 chỗ nào ạ em cảm ơn
Dũng Võ Thế cụ thể đi b?
A ơi cho e tại sao lúc in địa chỉ %x lại để ptr mà lúc in giá trị %5d lại để *ptr ạ? Có gì khá nhau ạ?
theo định nghĩa thì con trỏ là biến mà giá trị chứa trong nó là địa chỉ của biến khác. in cái địa chỉ của biến mà nó chứa thì chỉ cần ptr, còn chui vào địa chỉ đấy(nói cách khác là tìm tới tận chỗ của biến mà con trỏ trỏ tới ) để tìm giá trị thực sự tồn tại/ chứa trong biến đó thì phải dùng *ptr
+thân triệu e cảm ơn ạ!
anh ơi cho em hỏi: *p++ trong chương trình ví dụ kia có ý nghĩa gì ạ?
em cảm ơn!
#include
#include
void main()
{
int a = 6;
int *p = &a;
for (; *p < 15; *p++){
printf("%3d", *p);
}
_getch();
}
Dung Van tăng giá trị tại vị trí chứa trong con trỏ lên 1
thân triệu em cảm ơn