PDA

View Full Version : [Q] Con trỏ trong C++ thường được ứng dụng vào việc gì?



Eddy
06-12-2002, 18:29
Các chú chỉ cho cháu con trỏ trong C++ được sử dụng trong những trường hợp nào, và sách bài tập nào nói về con trỏ hay nhất?
Cám ơn nhiều!

danceswithwolves
06-12-2002, 21:32
để sử dụng vùng nhớ heap/free store, để thực thi tính polymorphism của objectz, để làm đủ thứ chuyện từ... hợp pháp đến bất hợp pháp trên bộ nhớ. Vân vân và vân vân.

Eddy
07-12-2002, 08:50
Con trỏ và tham chiếu khác nhau chỗ nào?Lúc nào nên dùng con trỏ hay dùng tham chiếu

dragon43
07-12-2002, 21:38
Trước hết bạn phải phân biệt được tham biến và tham trị trong chương trình con...Tham chiếu trong C/C++ chính là tham biến
Còn ngược lại là tham trị.

Tham chiếu có nghĩa là bạn muốn thao tác trực tiếp trên vùng nhớ đó.Nó chỉ có ý nghĩa khi bạn dùng làm đối số cho chương trình con(giống kiểu Var của pascal) ví dụ______

a=1;
ham1(int &a)
{
a=2;
}
ham1(a);
ra ngoài hàm có kết quả a=2(nếu mà không có & thì a vẫn =1)

Tuy nhiên bạn có thể dùng con trỏ để chỉ đến một vùng nhớ và nhờ con trỏ này để thao tác trực tiếp trên vùng nhớ đó
Và bây giờ nó thực hiện chức năng của biến tham chiếu
ví dụ

ham2(int *p)
{
*p=2;
}
a=1;
ham2(a);
(kết quả a=2)

hêhê!!!!!!!

quangvu
09-12-2002, 14:28
Hic ,trong VC thì đa số dùng com trỏ .Dù có cần hay không (kinh khủng)

duong_anh_duong
09-12-2002, 20:20
qua tới môn cấu trúc dữ liệu, con trỏ còn khủng khiếp hơn nữa kìa bạn ơi. ráng chịu đi

N1N
11-12-2002, 12:55
Eddy,

Bạn vào trong http://www.diendantinhoc.net . Trong đó có bài viết về pointer and linear link list too .

khôngtên
11-12-2002, 19:05
Con trỏ không quá phức tạp lắm đâu ! Chỉ cần nắm rõ bản chất mà cũng chẳng phải cần nắm tõ làm chi vì thật sự nó chỉ là địa chỉ của biến hay của bất kì một cấu trúc dữ liệu nào... Cái kho là áp dụng nó vào giải các bài toán yêu cầu phải dùng đến nó còn không nếu không sẽ rất khó khăn với một cấu trúc dữ liệu khác ! Vì vậy tôi khuyên bác nên tìm các sách về cấu trúc dữ liệu mà đọc tôi vì đa phần đếu có nói về cách sử dụng con trỏ để mô tả một cấu trúc dữ liệu nào đó chẳng hạn như danh sách liên kết, bảng băm....

cobecuoi
18-12-2002, 16:06
nhưng mừ sách chi mới duoc ah...
cần tên sách dể muh mua.. khong thì ra ngoài.. .chắc cobe cận them vài diop nữa vì biềt là tìm sách về pointer mà cái titlle thì... hic... có biết ???......

dragon43
18-12-2002, 19:20
Con trỏ có gì khó đâu nhỉ,nó cũng chỉ là một kiểu bình thường thôi mà!!!!!
Không cần con trỏ vẫn được mà,ví dụ hầu hết các ngôn ngữ lập trình bây giờ không dùng con trỏ nữa,như là VB,Java,C#...
Có gì về con trỏ cứ post lên chúng ta cùng thảo luận...

viettre
04-04-2003, 01:19
Bạn cần sách về con trỏ ư. Thử xem quyển "Cấu trúc dữ liệu và giải thuật" của thầy Đỗ Xuân Lôi xem

Huycuongpc
05-04-2003, 15:35
Contro trong C++ la gi thi em xem trong sch hoc C++trong 21ngay thi se ro thoi ma con trỏ trong C++ la loại công cụ rất tốt trong lập trình C++, nó rất tiện ích nhưng nó cũng rất nguy hiểm khi ta sử dụng nó nếu không đúng

Huycuongpc
05-04-2003, 15:45
Contro trong C++ la gi thi bạn xem trong sch hoc C++trong 21 ngày hoặc trong cuốn C++ dành cho sinh viên của thầy Tống ĐÌnh Quỳ bạn sẽ hiểu rõ hơn thi se ro thoi ma con trỏ trong C++ la loại công cụ rất tốt trong lập trình C++, nó rất tiện ích nhưng nó cũng rất nguy hiểm khi ta sử dụng nó nếu không đúng tuy nhiên nếu như học tới C# thì bạn sẽ thấy những vấn đề phức tạp hơn nhiều chúc bạn thành công

thanh_dn
13-04-2003, 08:35
Trong C hầu hết dùng con trỏ. C++ dùng tham chiếu nhiều hơn, hiện nay có xu thế dùng tham chiếu càng nhiều càng tốt vì cú pháp của nó an toàn hơn. Về bản chất contror đã bao gồm tham chiếu. Hiện nay chủ yếu dùng tham chiếu để truyền tham biến cho hàm. chứ rất ít khi dùng con trỏ.

minhhai
13-04-2003, 21:57
Ban nên tìm quyển sách Tin học 2 (của Đặng Thành Tín) và quyển ngôn ngữ lập trình (của Cao Hoàng Trụ),có bán ở quầy sách của ĐHBachKhoa TPHCM.Sách viết rất dễ hiểu (Tin học 2) ở chương con trỏ bạn vừa đọc sách vừa làm các bài tập dần dần thì con trỏ chắc không còn làm bạn chán ăn mất ngủ nưã đâu .

Thân chào.......!

thuythitruong
20-11-2011, 15:29
#include<iostream.h>
#include<string.h>

//khai bao ham
void daoxau(char *p);
//chuong trinh chinh
int main()
{
int n,thuong,du;
char s[17]="";

cout<<"nhap vao mot so nguyen duong: ";cin>>n;

thuong=n;
while(thuong)
{
du=thuong%2;
thuong/=2;
if(du) strcat(s,"1");else strcat(s,"0");
}
//Dao xau
daoxau(s);

cout<<"so nhi phan cua so nguyen "<<n<<" la "<<s;


cout<<endl;
return 0;
}
//dinh nghia ham
void daoxau(char *p)
{
int n=strlen(p);
int i;
char tg;

for(i=0;i<n/2;i++)
{
tg=p[i];p[i]=p[n-i-1];p[n-i-1]=tg;
}
}
//bạn dragon43 ơi bạn có thể chỉ cho t làm sao mà bắt buộc phải dùng con trỏ ở hàm daoxau() không

tuthan_blaococ
20-11-2011, 22:25
Thật là mệt mỏi.Học khó thiệt

megaownage
20-11-2011, 23:00
Mảng và xâu được truyền vào hàm bằng trị con trỏ chứa địa chỉ của phần tử đầu tiên.
Để ý lúc gọi hàm, người ta truyền biến trị s. Trị này chính là con trỏ chỉ vào s[0]

nói cách khác
daoxau(s);

daoxau(&s[0]);
In hệt nhau

@tuthan_blaococ: sì bam vừa vừa thôi cha nội/mụ nội.

truongqt
25-06-2015, 12:00
#include<iostream.h>
#include<string.h>

//khai bao ham
void daoxau(char *p);
//chuong trinh chinh
int main()
{
int n,thuong,du;
char s[17]="";

cout<<"nhap vao mot so nguyen duong: ";cin>>n;

thuong=n;
while(thuong)
{
du=thuong%2;
thuong/=2;
if(du) strcat(s,"1");else strcat(s,"0");
}
//Dao xau
daoxau(s);

cout<<"so nhi phan cua so nguyen "<<n<<" la "<<s;


cout<<endl;
return 0;
}
//dinh nghia ham
void daoxau(char *p)
{
int n=strlen(p);
int i;
char tg;

for(i=0;i<n/2;i++)
{
tg=p[i];p[i]=p[n-i-1];p[n-i-1]=tg;
}
}
//bạn dragon43 ơi bạn có thể chỉ cho t làm sao mà bắt buộc phải dùng con trỏ ở hàm daoxau() không

Em mới học về con trỏ, vào đây thấy đoạn:

for(i=0;i<n/2;i++)
{
tg=p[i];p[i]=p[n-i-1];p[n-i-1]=tg;
}

Có đúng ko vậy, theo em nghĩ nó thế này có đúng hơn ko ạ:

for(p=0;p<n/2;p++)
{
tg=*p;*p=*(p-1);*(p-1)=tg;
}

Nhờ các bác giải thích giùm em với ạ

THE LAST LEAF
25-06-2015, 23:11
Bài viết từ 2002 mà vẫn còn đồng chí đào mộ :))

megaownage
26-06-2015, 08:20
Em mới học về con trỏ, vào đây thấy đoạn:

for(i=0;i<n/2;i++)
{
tg=p[i];p[i]=p[n-i-1];p[n-i-1]=tg;
}

Có đúng ko vậy, theo em nghĩ nó thế này có đúng hơn ko ạ:

for(p=0;p<n/2;p++)
{
tg=*p;*p=*(p-1);*(p-1)=tg;
}

Nhờ các bác giải thích giùm em với ạ

Trường hợp của bạn đáng lẽ không cần phải hỏi. Cứ compile một bài chạy thử thì biết.
p=0 ---> *p là truy cập trị ở địa chỉ 0 ???

Bài này tác giả làm không hẳn là chuyên ngiệp. Muốn đảo chuỗi thì dùng 2 biến đặt 2 đầu chuỗi, cho 2 biến tiến vào, đến lúc đụng nhau là đã vào tời giữa chuỗi, chấm dứt vòng lặp. Tương tự như vậy, nếu dùng con trỏ thì phải đặt 2 con trỏ ở 2 đầu.

for (char *p1 = p, *p2 = p+strlen(p)-1; p1 < p2; )
{
char pt = *p1; *p1 = *p2--; *p1++ = pt;
}

Vòng lặp For trong C là một lệnh rất mạnh, có thể sử dụng nhiều biến điều khiển. Làm việc với C phải biết tận dụng sức mạnh của ngôn ngữ. Đặc biệt con trỏ vốn là yếu tố nguy hiểm trong ngôn ngữ C. Đã hy sinh hiểm nguy để dùng con trỏ mà không tác động được sức mạnh là làm công việc lỗ lã. Thường thường, dùng con trỏ sẽ kèm với ++ hay -- ngay tại chỗ.


Bài viết từ 2002 mà vẫn còn đồng chí đào mộ :))

Người ta chịu khó học thì phải đáng khuyến khích chư? Dẫu sao cũng còn tốt hơn lợi dụng quảng bá chữ ký !!!

lampv
31-07-2015, 17:09
Một vai trò theo mình là khá quan trọng. Con trỏ giúp giảm thiểu bộ nhớ - tránh dư thừa bộ nhớ

hoangtu_codon
22-09-2015, 21:15
Con trỏ ứng dụng vào việc duyệt mảng hoặc lưu dữ liệu dạng danh sách.
Ví dụ: danh sách liên kết và cây nhị phân nhiều nhất.

ksc10
01-04-2016, 18:41
Ba cái tree :)

Merge sort dual pointer, chuyển qua std::vector vẫn dùng tốt. (mà nếu dùng std::vector thì đã dùng std::sort)

mini_bestboy
27-10-2016, 01:11
Con trỏ dùng nhiều trong các cấu trúc dữ liệu như Linked List, các loại Tree, Đồ thị ... Nó rất thích hợp khi các dữ liệu có mối liên kết với nhau, ví dụ trong cây, bạn có thể chuyển cả 1 nhánh cây bằng việc đổi 1 node trong cây đó thôi