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; //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 |
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 using namespace std;
void Input(int *p, int length)
{
for (int i=0; i
cin>>*(p+i);
}
}
void Output(int *p, int length)
{
for (int i=0; i
cout<<*(p+i)<<” “;
}
}
int main()
{
int *a;
int lengtha;
cout<<”Nhap do dai: “;
cin>>lengtha;
Input(a, lengtha);
cout<<”========”<
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ể 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à bạn hoàn toàn có thể viết
cin>>p[i]; cout< 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 bạn lưu ý, phần tử cuối cùng của nó là phần tử
.
No comments:
Post a Comment