Professional Documents
Culture Documents
Nhap Mon Lap Trinh Buoi10 Con Tro Va Mang (Cuuduongthancong - Com)
Nhap Mon Lap Trinh Buoi10 Con Tro Va Mang (Cuuduongthancong - Com)
.c
ng
Nhập môn Lập trình – IT001
co
an
th
ng
Con trỏ và Mảng
o
du
u
cu
2015 1
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Nội dung
om
• Sự tƣơng quan mảng 1 chiều và con trỏ
.c
• Sử dụng tham số mảng 1 chiều trong hàm
ng
co
• Sự tƣơng quan mảng 2 chiều và con trỏ
an
• Sử dụng tham số mảng 2 chiều trong hàm
th
o ng
du
u
cu
2015 2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
SỰ TƢƠNG QUAN MẢNG 1 CHIỀU VÀ CON
TRỎ
om
• Tên của mảng là một hằng địa chỉ, chứa địa chỉ của phần tử
.c
đầu tiên.
ng
co
• Với khai báo: int a[10] thì:
a tương đương với &a[0]
an
th
a+i tương đương với &a[i] ng
*(a+i) tương đương với a[i]
o
du
• Xét khai báo : int a[5], *pa=a; khi đó con trỏ pa giữ địa chỉ
u
om
#include <conio.h> {
.c
#define MAX 100 printf("Nhap phan tu a[%d]: ",i);
ng
void main() scanf("%d", &a[i]);
co
}
{
an
for(i=0;i<n;i++)
th
int a[MAX], n, i;
printf("%4d", a[i]);
ng
printf(“So phan tu cua
o
mang:"); }
du
scanf("%d",&n);
u
cu
www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ: Nhập xuất mảng 1 chiều bằng con trỏ
om
#include <conio.h> {
.c
#define MAX 100 printf("Nhap phan tu a[%d]: ",i);
ng
void main() scanf("%d", a+i);
co
}
{
an
for(i=0;i<n;i++)
th
int a[MAX],n,i;
printf("%4d", *(a+i));
ng
printf(“So phan tu cua
o
mang:"); }
du
scanf("%d",&n);
u
cu
www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ: Nhập xuất mảng 1 chiều bằng con trỏ
om
#include <conio.h> {
.c
#define MAX 100 printf("Nhap phan tu a[%d]: ",i);
ng
void main() scanf("%d", pa+i);
co
}
{
an
for(i=0;i<n;i++)
th
int a[MAX],n,i,*pa;
printf("%4d", *(pa+i));
ng
pa=a;
o
}
du
scanf("%d",&n);
www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Nhắc lại: truyền tham số là mảng cho hàm
Ví dụ:
om
int TinhTong( int pa[], int n);
void main()
.c
{
ng
int a[10], n;
co
TinhTong(a, n);
an
th
} ng
int TinhTong( int pa[], int n)
o
{
du
….
u
cu
}
Ở ví dụ trên, tham số hình thức của mảng a trong
hàm TinhTong khai báo dùng mảng hình thức: int
pa[] www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Tham số hình thức cho hàm là con trỏ
Ví dụ:
om
int TinhTong( int *pa, int n);
void main()
.c
{
ng
int a[10], n;
co
TinhTong(a, n);
an
th
} ng
int TinhTong( int *pa, int n)
o
{
du
….
u
cu
}
Ở ví dụ trên, tham số hình thức của mảng a trong
hàm TinhTong có thể khai báo dùng con trỏ: int *pa
www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
SỰ TƢƠNG QUAN MẢNG 2 CHIỀU VÀ CON
TRỎ
om
• Mảng 2 chiều là mảng (1 chiều) của mảng.
.c
• Khi khai báo: int a[2][3] thì trong bộ nhớ tạo ra:
ng
Phần tử a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
co
Địa chỉ 1 2 3 4 5 6
an
th
Tức mảng a có 2 phần tử, mỗi phần tử là 1 mảng chứa 3 số nguyên.
ng
• Tên mảng a chứa địa chỉ của phần tử đầu tiên.
o
om
• Xét khai báo : int a[2][3], *pa;
.c
pa = (int*)a;
ng
Khi đó:
co
pa tương đương với &a[0][0].
an
pa+1 tương đương với &a[0][1].
pa+2 tương đương với &a[0][2].
th
ng
pa+3 tương đương với &a[1][0].
o
du
om
• Xét khai báo : int a[2][3], *pa;
.c
pa = (int*)a;
ng
Khi đó:
co
*pa tương đương với a[0][0].
an
th
*(pa+1) tương đương với a[0][1].
ng
*(pa+2) tương đương với a[0][2].
o
du
om
#include <conio.h> for (j=0;j<m;j++)
.c
{
#define RMax 100
ng
printf("Nhap phan tu a[%d][%d]:
#define CMax 100
co
",i,j);
void main() scanf("%d", &a[i][j]);
an
}
th
{ ng for(i=0;i<n;i++)
int a[RMax][CMax], n, m, i, j; {
o
for (j=0;j<m;j++)
du
om
#include <conio.h> for (j=0;j<m;j++)
.c
{
#define RMax 100
ng
printf("Nhap phan tu a[%d][%d]:
#define CMax 100
co
",i,j);
void main() scanf("%d", pa + i*m +j);
an
}
th
{ ng for(i=0;i<n;i++)
int a[RMax][CMax],n,m, i, j, *pa; {
o
for (j=0;j<m;j++)
du
pa=(int*)a;
printf(“So dong va cot:"); {
u
cu
om
void main()
.c
{
ng
int a[100][100], n,m;
co
TinhTong(a, n, m);
}
an
int TinhTong( int pa[][100], int n, int m)
{
th
ng
….
o
du
}
Ở ví dụ trên, tham số hình thức của mảng 2 chiều a
u
cu
om
void main()
.c
{
ng
int a[100][100], n,m;
co
TinhTong(a, n, m);
}
an
int TinhTong( int (*pa)[100], int n, int m)
{
th
ng
….
o
du
}
Ở ví dụ trên, tham số hình thức của mảng a trong hàm
u
cu
om
void main()
.c
{
ng
int a[100][100], n,m;
co
TinhTong(a, n, m);
}
an
int TinhTong( int *pa, int n, int m)
{
th
ng
….
o
du
}
Ở ví dụ trên, tham số hình thức của mảng a trong hàm
u
cu
om
2) Mảng con trỏ
.c
ng
3) Con trỏ hàm
co
4) Các phép toán trên con trỏ
an
th
o ng
du
u
cu
www.uit.edu.vn
CuuDuongThanCong.com https://fb.com/tailieudientucntt