1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Con trỏ và mảng

2 343 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Con trỏ và mảng Con trỏ và mảng một chiều Trong C mảng là một hằng con trỏ, do đó các thao tác đối với mảng đều có thể được thông qua con trỏ.

Trang 1

3 Con trỏ và mảng

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

Trong C mảng là một hằng con trỏ, do đó các thao tác đối với mảng đều có thể được thông qua con trỏ

 Chúng ta xét một số ví dụ về việc khai báo và sử dụng con trỏ và mảng như sau:

int a[10]; à 10 đối tượng a[0]…a[9] được tạo ra

int *pa; thì pa à ? Nếu pa=a;

Thì pa trỏ tới mảng a và cũng là trỏ tới phần tử đầu tiên của mảng a

Nếu pa=&a[0];

Thì pa trỏ tới phần tử đầu tiên của mảng a

*(pa+1): nội dung của a[1]

pa+1 : trỏ tới phần tử tiếp theo pa-i: trỏ tới phần tử i trước pa

*(pa+i): nội dung của a[i]

 Ví dụ: Chúng ta xét đoạn chương trình sau để thấy rõ hơn mối quan hệ giữa con trỏ và mảng

void main(){

int *pointer, a[10],i;

for(i=0;i<10;i++){

printf("a[%d]=",i); scanf("%d",&a[i]);

} pointer=&a[0]; // pointer=a for(i=0;i<10;i++)

printf("a[%d]=\t%d con tro :%d",i,a[i],*(pointer+i));

getch();

}

 Con trỏ và mảng nhiều chiều

Khi đề cặp đến mảng, chúng ta có từng tự hỏi mảng có địa chỉ không ?, nếu có thì địa chỉ của mảng

là gì ?

Thì câu trả lời là: Có và địa chỉ của mảng chính là tên mảng

Ví dụ mảng int A[3][3]

thì đia chỉ là A

 Xét mảng sau: A[5][5]

o Địa chỉ đầu: A=A[0]=*(A+0)=&A[0][0]

o Địa chỉ hàng thứ nhất: A[1]=*(A+1)=&A[1][0]

o Địa chỉ hàng thứ i: A[i]=*(A+i)=&A[i][0]

o Địa chỉ phần tử A[i][j]: (*(A+i)+j)

o Nội dung phần tử A[i][j]: *(*(A+i)+j)

 Để hiểu rõ hơn về mảng và con trỏ nhiều chiều chúng ta xét đoạn lệnh sau:

void main(){

float A[3][3];

int i,j;

clrscr();

printf("Dia chi cac hang: \n");

for(i=0;i<3;i++)

printf(" %d = %p \t",i,A[i]);

printf("\n");

for(i=0;i<3;i++)

printf(" %d = %p \t",i,*(A+i));

printf("\nDia chi cac phan tu\n" );

Trang 2

for(j=0;j<3;j++) printf("[%d][%d] = %p \t",i,j,(*(A+i)+j));

printf("\n\n");

for(i=0;i<3;i++)

for(j=0;j<3;j++) printf("[%d][%d] = %p \t",i,j,(*(A+i)+j));

getch();

}

4 Con trỏ và tham số hình thức của hàm

Để thay đổi trực tiếp nội dung của biến trong hàm thì đối của hàm phải là một con trỏ Đối với những

biến có kiểu cơ bản, chúng ta sử dụng toán tử &<tên biến> để truyền địa chỉ của biến cho hàm như trong ví

dụ đổi nội dung của biến x và y trong hàm swap(&x, &y) như sau:

void swap(int *px, int *py){

int temp

temp=*px;

*px=*py;

*py=temp;

}

Khi chúng ta muốn viêt một hàm để lấy kết quả trả về, nhưng số kết quả trả về là nhiều hơn một thì chúng ta có thể giải quyết bằng cách sử dụng các con trỏ làm tham số hình thức của hàm

Ngày đăng: 22/12/2016, 13:38

w