Tải bản đầy đủ (.ppt) (64 trang)

Tài liệu Tin học đại cương- bài 9: con trỏ và địa chỉ mảng hàm và chương trình chuỗi ký tự ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (384.94 KB, 64 trang )


1
TIN HỌC ĐẠI CƯƠNG
www.uit.edu.vn
BÀI 9
BÀI 9
CON TRỎ VÀ ĐỊA CHỈ
CON TRỎ VÀ ĐỊA CHỈ
MẢNG
MẢNG
HÀM VÀ CHƯƠNG TRÌNH
HÀM VÀ CHƯƠNG TRÌNH
CHUỖI KÝ TỰ
CHUỖI KÝ TỰ
Tin học đại cương
2
NỘI DUNG
NỘI DUNG
CON TRỎ VÀ ĐỊA CHỈ
5
Tin học đại cương
3

Toán tử địa chỉ &

Con trỏ

Qui tắc sử dụng con trỏ

Qui tắc về kiểu giá trị trong khai báo
NỘI DUNG BÀI CON TRỎ VÀ ĐỊA CHỈ


NỘI DUNG BÀI CON TRỎ VÀ ĐỊA CHỈ
Tin học đại cương
4
TOÁN TỬ ĐỊA CHỈ
TOÁN TỬ ĐỊA CHỈ

CÁC KHÁI NIỆM LIÊN QUAN ĐẾN BIẾN
Ví dụ: int a = 15;
Giá trị của biến
Kiểu biến
Tên biến
Tin học đại cương
5

ĐỊA CHỈ CỦA BIẾN

Khái niệm: Địa chỉ của biến là số thứ
tự của byte đầu tiên trong một dãy các
byte liên tiếp mà máy dành cho biến.

Phân loại địa chỉ biến: địa chỉ kiểu
int, float, double, …

Lấy địa chỉ của một biến: &
TOÁN TỬ ĐỊA CHỈ
TOÁN TỬ ĐỊA CHỈ
Tin học đại cương
6
Ví dụ:
int x =5;


x được cấp phát vùng nhớ có kích thước
2 byte liên tiếp. Giả sử tại địa chỉ 1050,
ta có:

Địa chỉ của x: &x = 1050, giá trị của x = 5
1050
5x
TOÁN TỬ ĐỊA CHỈ
TOÁN TỬ ĐỊA CHỈ
Tin học đại cương
7

KHÁI NIỆM BIẾN CON TRỎ
Là một biến dùng để lưu địa chỉ của một
biến, mỗi loại địa chỉ sẽ có một kiểu con
trỏ tương ứng (phụ thuộc vào loại dữ liệu
lưu trữ trong địa chỉ đó)

PHÂN LOẠI CON TRỎ
Con trỏ kiểu int dùng để chứa địa chỉ của
các biến kiểu int. Tương tự ta có con trỏ
kiểu float, double, …
CON TRỎ
CON TRỎ
Tin học đại cương
8

KHAI BÁO BIẾN CON TRỎ


Con trỏ không kiểu:
Cú pháp khai báo:
void *tênbiến;
Ví dụ:
void *p, *q;
CON TRỎ
CON TRỎ
Tin học đại cương
9

Con trỏ có kiểu:

Chỉ chứa những địa chỉ của loại dữ
liệu phù hợp với kiểu dữ liệu mà ta đã
khai báo cho con trỏ.

Cú pháp khai báo:
<kiểu dữ liệu> *tênbiến;

Ví dụ:
int x = 5;
int *p, *q;
p = &x; // gán đ/c biến x cho p
CON TRỎ
CON TRỎ
Tin học đại cương
10

TÊN CON TRỎ


Sử dụng địa chỉ chứa trong con trỏ

Ví dụ:
int *p, *q;
int x = 5;
// gán đ/c biến x cho con trỏ p
p = &x;
// lưu đ/c trong p vào con trỏ q
q = p;
Giả sử địa chỉ của x là 1010 thì p = 1010
và q = 1010
QUI TẮC SỬ DỤNG CON TRỎ
QUI TẮC SỬ DỤNG CON TRỎ
Tin học đại cương
11

DẠNG KHAI BÁO CỦA CON TRỎ

Sử dụng giá trị lưu tại vùng nhớ mà
con trỏ trỏ tới

Ví dụ:
int *p, *q;
int x = 5, z;
p = &x; // *p = x = 5;
q = p; // *q = *p = x = 5
// z = 5 + 3*5 = 20;
z = *p + 3*(*q);
QUI TẮC SỬ DỤNG CON TRỎ
QUI TẮC SỬ DỤNG CON TRỎ

Tin học đại cương
12

Khi đó ba biểu thức sau đây là tương
đương:
*q = z+x;
*p = z+x;
x = z+x;
QUI TẮC SỬ DỤNG CON TRỎ
QUI TẮC SỬ DỤNG CON TRỎ
Tin học đại cương
13
NỘI DUNG
NỘI DUNG
MẢNG6
Tin học đại cương
14
NỘI DUNG BÀI MẢNG
NỘI DUNG BÀI MẢNG

Khái niệm

Khai báo

Chỉ số của mảng

Lấy địa chỉ các phần tử mảng

Nhập xuất mảng


Mảng và con trỏ

Mảng và hàm
Tin học đại cương
15
KHAI BÁO MẢNG
KHAI BÁO MẢNG

Cú pháp:
<KiểuDL> <Tên > [<Danh
sách các chiều >];

Ví dụ 1:
int a[100];
int P[100][100];

Ví dụ 2:
#define MAX 100
float c[MAX][MAX], d[MAX];
Tin học đại cương
16
CHỈ SỐ MẢNG
CHỈ SỐ MẢNG

KIỂU DỮ LIỆU CỦA CHỈ SỐ

Chỉ số của mảng phải là một giá trị kiểu đơn
giản, rời rạc: số nguyên, ký tự.

Nếu là số nguyên thì mặc định từ số 0.


Ví dụ: int A[5];

Tên mảng: A

Kiểu dữ liệu của từng phần tử trong mảng:
int

Số phần tử tối đa trong mảng: 5 phần tử

Các chỉ số được đánh số: 0 1 2 3 4
Tin học đại cương
17
LẤY ĐỊA CHỈ MỘT PHẦN TỬ
LẤY ĐỊA CHỈ MỘT PHẦN TỬ

Cú pháp:
&<Tên biến>[<chỉ số>];

Ví dụ:
int A[5];
scanf(“%d”, &A[0]);

Chú ý: Tên mảng chứa địa chỉ phần tử
đầu tiên của mảng.
Tin học đại cương
18
NHẬP XUẤT MẢNG (TRỰC TIẾP)
NHẬP XUẤT MẢNG (TRỰC TIẾP)
#include <stdio.h>

#include <conio.h>
#define MAX 100
void main()
{
int A[MAX], N, i;
printf(“So phan tu cua mang:");
scanf("%d", &N);
for(i=0;i<N;i++)
{
printf("Nhap phan tu A[%d]: ",i);
scanf("%d", &A[i]);
}
for(i=0; i<N; i++)
printf("%4d", A[i]);
}
Tin học đại cương
19
#include <stdio.h>
#include <conio.h>
#define MAX 100
void main()
{
float A[MAX], temp;
int N, i;
printf(“So phan tu cua mang: ");
scanf("%d", &N);
for(i=0; i<N; i++)
{
printf("Nhap phan tu A[%d]: ",i);
scanf("%f", &temp);

A[i]=temp;
}
for(i=0; i<N; i++)
printf("%3.1f", A[i]);
}
NHẬP XUẤT MẢNG (GIÁN TIẾP)
NHẬP XUẤT MẢNG (GIÁN TIẾP)
Tin học đại cương
20
SỰ TƯƠNG QUAN MẢNG VÀ CON TRỎ
SỰ TƯƠNG QUAN MẢNG VÀ CON TRỎ

Khi khai báo một mảng thì tên của mảng
là một hằng địa chỉ, chứa địa chỉ của phần
tử đầu tiên (phần tử có chỉ số 0).

Như vậy ta có thể nói mảng là con trỏ
hằng.

Xét khai báo: int a[5]; *pa=a; khi
đó con trỏ pa cũng giữ địa chỉ của phần
tử đầu tiên của mảng a và pa+i (hoặc
pa[i]) là địa chỉ của phần tử a[i].
Tin học đại cương
21
NHẬP XUẤT MẢNG BẰNG CON TRỎ
NHẬP XUẤT MẢNG BẰNG CON TRỎ
#include <stdio.h>
#include <conio.h>
#define MAX 100

void main()
{
int a[MAX], N, i, *pa;
pa = a;
printf(“So phan tu cua mang: ");
scanf("%d", &N);
for(i=0; i<N; i++)
{
printf("Nhap phan tu a[%d]: ", i);
scanf("%d", pa+i);
}
for(i=0; i<N; i++)
printf("%4d", *(pa+i));
}
Tin học đại cương
22

CÁC KHAI BÁO TƯƠNG ĐƯƠNG

int *pa;  int pa[];

double *pa;  double pa[];

char *pa;  char pa[];

long *pa;  long pa[];
SỰ TƯƠNG QUAN MẢNG VÀ CON TRỎ
SỰ TƯƠNG QUAN MẢNG VÀ CON TRỎ
Tin học đại cương
23

MẢNG VÀ HÀM
MẢNG VÀ HÀM

Khai báo hàm nhập mảng
void nhap(int a[MAX], int &N);

Phân tích

Tên hàm: nhap.

Tham số N là tham chiếu.

Tham số a là tham trị vì a là con trỏ hằng.

Giá trị trả về: không có.
Tin học đại cương
24
CHƯƠNG TRÌNH MINH HỌA
CHƯƠNG TRÌNH MINH HỌA
#include <stdio.h>
#include <conio.h>
void main()
{
int X[MAX],p;
nhap(X,p);
xuat(X,p);
sapxep(X,p);
xuat(X,p);
}
Tin học đại cương

25
// định nghĩa hàm nhập
void nhap(int A[], int N)
{
for(int i=0; i<N; i++)
{
printf(“Nhap phan tu thu %d: ", i);
scanf(“%d”, &A[i]);
}
}
// định nghĩa hàm xuất
void xuat(int A[], int N)
{
for(int i=0; i<N; i++)
{
printf("%4d", A[i]);
}
}
CHƯƠNG TRÌNH MINH HỌA (tt)
CHƯƠNG TRÌNH MINH HỌA (tt)

×