Con trỏ và mảng một chiều

Một phần của tài liệu Đề cương Ngôn ngữ lập trình C++ (Trang 66 - 69)

- Nếu a[M] < c thì gọi đề quy trên đoạn [M+1, R] B2:

a. Con trỏ và mảng một chiều

Nh đã biết, các phần tử của mảng có thể đợc xác định thông qua chỉ số. Ví dụ phần tử thứ nhất là a[0], phần tử thứ 2 là a[1]…

Ta còn có cách thứ 2 để xác định các phần tử của mảng, không phải thông qua các chỉ số mà thông qua con trỏ.

Khi khai báo một mảng a gồm 10 phần tử, máy tính sẽ cấp phát 10 ô nhớ liên tiếp nhau.

Điều đặc biệt là: địa chỉ của phần tử đầu tiên của mảng đợc chứa trong tên mảng. Nh vậy a tơng đơng với &a[0] và tên mảng tơng đơng với một con trỏ chứa địa chỉ của phần tử đầu tiên của mảng.

Ta có:

a chứa địa chỉ &a[0]. a+i chứa địa chỉ &a[i].

Biên soạn: Nguyễn Mạnh Cờng Trang 6 6

Nh vậy, nếu p là con trỏ cùng kiểu ta có thể gán: p = a; và khi đó:

a[i] = p[i] = *(a+i) = *(p+i);

Thay bằng truy cập tới phần tử thứ i+1 của mảng qua a[i] ta có thể viết p[i] hoặc *(a+i) hoặc *(p+i).

VD1: float a[4]; float a[4]; a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; cout<<a[3]; cout<<*(a+3); float *p; p = a; cout<<p[3]; cout<<*(p+3); getch(); }

VD2: Nhập vào một mảng 4 số nguyên và tính tổng của các số đó.

Cách 1:

void main() {

float a[4];

for (int i=0; i<4; i++) {

cout<<”Nhập a[“<<i<<”]”; cin>>a[i];

}

float T=0;

for(i=0; i<4; i++) T+=*(a+i); cout<<”Tổng bằng”<<T; getch(); } Cách 2: void main() { float a[4], *p;

for (int i=0; i<4; i++) {

cin>>a[i]; }

p=a; float T=0; for(i=0; i<4; i++)

T+=p[i]; cout<<”Tổng bằng”<<T; getch(); } Cách 3: void main() { float a[4], *p;

for (int i=0; i<4; i++) { cout<<”Nhập a[“<<i<<”]”; cin>>a[i]; } p=a; float T=0;

for(i=0; i<4; i++) T+=*(p+i);

cout<<”Tổng bằng”<<T; getch();

}

Do tên mảng cũng tơng đơng với một con trỏ nên khi p là một con trỏ kiểu nguyên, ta có thể khai báo int *p; nhng cũng có thể khai báo nh một mảng hình thức: int p[]. Mặt khác, thậm chí ta có thể sử dụng con trỏ p nh một mảng. Hàm Sum2() sau sẽ sử dụng con trỏ a nh một mảng.

VD: Viết hàm tính tổng các phần tử của mảng 4 phần tử.

double Sum1(double a[]) {

double T=0;

for(int i=0; i<4; i++) T+=a[i];

return T; }

double Sum2(double *a) {double T=0;

for(int i=0; i<4; i++) T+=a[i];

return T; }

Biên soạn: Nguyễn Mạnh Cờng Trang 6 8

void main() { double *b; b[0] = 1; b[1] = 3; b[2] = 2; b[3] = 5; cout<<”Tổng thứ nhất”<<Sum1(b); cout<<”Tổng thứ hai”<<Sum2(b); getch(); }

Một phần của tài liệu Đề cương Ngôn ngữ lập trình C++ (Trang 66 - 69)

Tải bản đầy đủ (DOC)

(74 trang)
w