Giáo trình ngôn ngữ C


Truy xuất các phần tử mảng qua con trỏ



tải về 2.34 Mb.
Chế độ xem pdf
trang56/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   52   53   54   55   56   57   58   59   ...   62
C ĐHQGHN

Truy xuất các phần tử mảng qua con trỏ 
Giả sử A là mảng một chiều như trên chúng ta có: 
- A là con trỏ trỏ tới A[0] hay A tương đương với &A[0] 
- (A +1) là con trỏ trỏ tới phần tử kiểu T kế tiếp sau A[0] tức là A+1 trỏ tới A[1] 
hay (A+1) 
⇔ &A[1] 
- Tổng quát (A+i) 
⇔ &A[i] 
Như chúng ta biết từ trước là nếu p là con trỏ lưu địa chỉ của biến x thì * p là giá trị 
của x.
Như vậy *A chính là giá trị của A[0], *(A+1) là A[1],...
tổng quát chúng ta có *(A+i) 
A[i] 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
86
Ví dụ chúng ta có thể minh họa bằng đoạn lệnh nhập và in các phần tử mảng A như 
sau: 
int A[10]; 
int i; 
.... 
// nhập mảng A có 10 phần tử 
for(i = 0; i<10; i++) 
{ printf(“A[%d] = “, i); 
scanf(“%d”, A+i); 

// in mảng A có 10 phần tử,  
for(i = 0; i<10; i++) 
{ printf(“A[%d] = “, i); 
scanf(“%d”, *(A+i)); 

Với mảng 2 chiều D[n][m] cũng tương tự như trên ta có: 
• D là con trỏ trỏ tới hàng dầu tiên trong mảng tức là: D ⇔ &D[0] 
- D[0] là con trỏ trỏ tới phần tử đầu tiên là D[0][0] hay D[0] 
⇔ &D[0][0]
nên *D[0]
⇔ D[0][0];
hay ** D
⇔ D[0][0] 
- (D[0]+j ) con trỏ tới phần tử D[0][j], hay (D[0]+j) 
⇔ &D[0][j]
nên ta có *(D[0]+j) 
⇔ D[0][j]
hay *(*D+j) 
⇔ D[0][j] 
• Tương tự tổng quát ta có (D+i) ⇔ &D[i]. 
- D[i] là con trỏ trỏ tới phần tử đầu tiên là D[i][0] hay D[i] 
⇔ &D[i][0]
nên *D[i]
⇔ D[i][0]; 
hay *(*D+i) 
⇔ D[i][0] 
- (D[i]+j ) con trỏ tới phần tử D[i][j], hay (D[i]+j) 
⇔ &D[i][j]
nên ta có *(D[i]+j) 
⇔ D[i][j] 
hay tổng quát ta có *(*(D+i)+j) 
 D[i][j] 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
87

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   52   53   54   55   56   57   58   59   ...   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương