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

Một phần của tài liệu Đề Cương Môn Kỹ Thuật Lập Trình Trường Cao Đẳng Công Nghiệp Hà Nội (Trang 68 - 71)

- 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 8

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++) {

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(); } 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; nhưng 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];

Biªn so¹n: NguyÔn M¹nh Cêng Trang 7 0

return T; } 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 Môn Kỹ Thuật Lập Trình Trường Cao Đẳng Công Nghiệp Hà Nội (Trang 68 - 71)