Con trỏ, mảng và xâu kí tự

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 82 - 84)

Như tôi đã nói ở trên, mảng có thể được khai báo theo kiểu truyền thống hoặc theo cấu trúc con trỏ. Ví dụ, tôi có một mảng số nguyên, chúng có 20 phần tử

int numbers[20]; //Khai báo truyền thống int *p = new int[20]; //Khai báo con trỏ

Hoặc ta có khai báo một biến xâu kí tự theo một trong 3 cách sau char xau[20]; //Khai báo truyền thống

char *xau; //Khai báo con trỏ string xau;//Khai báo xâu

C

+

+

Khởi tạo giá trị cho con trỏ khi nó đóng vai trò là mảng

Thứ nhất: ta sử dụng phép gán để sao chép toàn bộ mảng lên con trỏ

p = numbers;//p là con trỏ, numbers là mảng

Thứ hai: khởi tạo trực tiếp cho từng phần tử

int *p;

for (int i=0; i<20; i++){ *(p+i)=numbers[i]; }

Chương trình nhập – xuất dữ liệu bằng việc sử dụng con trỏ.

Chương trình Kết quả

#include<iostream> using namespace std;

void Input(int *p, int length) {

for (int i=0; i<length; i++){ cin>>*(p+i);

} }

void Output(int *p, int length) {

for (int i=0; i<length; i++){ cout<<*(p+i)<<” “; } } int main() { int *a; int lengtha; cout<<”Nhap do dai: “; cin>>lengtha; Input(a, lengtha); cout<<”========”<<endl; Output(a, lengtha); return 0; } Nhap do dai: 4 6 8 9 0 ======== 6 8 9 0

Giải thích: biến con trỏ luôn được truyền theo kiểu tham biến, do đó, chúng ta

không cần bổ sung dấu & vào bên trước tên biến. Hàm Input dùng để nhập

mảng số nguyên có độ dài length, hàm Output dùng để xuất dữ liệu từ mảng nguyên đó. Khi truy xuất từ biến con trỏ, ngoài cách xuất như trên, ta còn có thể

C

+

+

viết p[i] tương ứng như mảng – p[i] và *(p+i) đều là phần tử thứ i. Nghĩa là ta hoàn toàn có thể viết

cin>>p[i]; cout<<p[i]; cin>>*(p+i); cout<<*(p+i);

int c = p[i]+q[j]; int c = *(p+i)+*(q+j);

Việc sử dụng con trỏ để thay cho xâu cũng hoàn toàn tương tự. Nhưng hãy lưu ý, phần tử cuối cùng của nó là phần tử \0.

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 82 - 84)