Pointer (Con trỏ) cơ bản trong C

Đây là bài viết dành cho bạn nếu bạn lần đầu nghe tới khái niệm con trỏ trong lập trình. Trong bài viết này tớ sẽ ghi theo kiểu mì ăn liền để các bạn có khái niệm tổng quát khi sử dụng con trỏ.

Nghe mơ màng: “Con trỏ”, “Con trỏ” với một người chưa biết về lập trình thì cũng hình dung ra nó là một cái gì đó trỏ tới một cái gì đó, :)).

Còn đối với lập trình thì con trỏ là gì, nó bản chất nó vẫn là một biến(như bạn khai báo biến thông thường), nhưng biến này đặc biệt ở chỗ là nó lưu trữ địa chỉ của vùng nhớ mà nó trỏ tới.

Ví dụ:

- Bạn muốn con trỏ trỏ tới một biến (thì con trỏ sẽ lưu trữ địa chỉ của biến đó, một số hexa mà bộ nhớ cấp phát )

- Bạn muốn con trỏ trỏ tới một mảng thì nó lưu trữ địa chỉ của phần tử đầu tiên của mảng đó.

- Bạn muốn con trỏ trỏ tới một hàm thì con trỏ sẽ lưu trữ địa chỉ của hàm đó (lát mình chỉ cách dùng)

- Bạn muốn con trỏ trỏ tới một struct(hình như khi học tới con trỏ thì chưa học tới cái này thì phải – lát mình chỉ)

- Bạn muốn con trỏ trỏ tới người yêu của thằng nào đó thì lưu trữ địa chỉ nhà em nó , ok .. :))

- Con trỏ có thể trỏ tới con trỏ ….

và kiểu của con trỏ bạn có thể dùng là (int, char, array, structure, function, hay con trỏ).

Code:

Con trỏ trỏ tới một biến.

        int *p;
	int i = 40;
	p = &i;
	cout << *p << endl;

Con trỏ trỏ tới một mảng.



int arr[]= { 1, 2, 3, 4 }; int *pointer; pointer = &arr[0]; for(int i=0; i<4; ++i){ cout << *(pointer++) << endl; }

Con trỏ trỏ tới một hàm (function)



void loveCoding(){ cout << "loveCoding() function !!!" <<endl; } main function bạn khai báo : void (*function_pointer)(void); function_pointer = &loveCoding;

Con trỏ trỏ tới một struct.

 

Student student; student.name = (char*)"Nguyen Van Kien"; student.code = (char*)"092937"; cout << student.name <<endl; cout << student.code <<endl; Student *student_pointer; student_pointer = &student; cout <name <name = (char*) "Ql091"; cout << student.name <<endl;

Một số điều lưu ý về con trỏ.

ví dụ mình có đoạn code.

 
int *pointer; 
int a = 40; // pointer tro toi bien a. 
pointer = &a; 

Khi bạn in ra : *pointer thì kết quả sẽ là 40 (bởi với khai báo *pointer thì chúng ta sẽ nói cho trình biên dịch biết mình đang muốn lấy nội dung hay giá trị mà biến pointer (chưa địa chỉ) trỏ tới ) Như vậy khi bạn làm việc với với *pointer thì kiểu như bạn toàn quyền sinh sát với các biến mà nó trỏ tới vậy, nếu như bạn làm tiếp như sau: *pointer = 50, thì vùng nhớ mà con trỏ đang trỏ tới lập tức sẽ thay đổi thành 50, mà vùng nhớ mà con trỏ này trỏ tới chính là a, vậy bạn thay đổi *pointer đồng nghĩa bạn đang thay đổi giá trị của a (nó cũng có kết quả tương tự nếu như bạn gán a = 50 ).
kịch bạn như đoạn mã sau:



int *p; int i = 40; p = &i; cout << *p << endl; i = 50; cout << *p << endl;
About these ads

3 thoughts on “Pointer (Con trỏ) cơ bản trong C

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s