1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng kỹ thuật lập trình bài 10 phạm đình sắc

14 155 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 3,13 MB

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

Nội dung

Phạm Đình Sắc dinhsac@gmail.com Trường Cao đẳng Kỹ thuật Công nghệ Đồng Nai Khoa Công nghệ thông tin NHẬP MÔN LẬP TRÌNH CON TRỎ CƠ BẢN VC & BB 22 Nội dung Khái niệm và cách sử dụng 1 Các

Trang 1

Phạm Đình Sắc

dinhsac@gmail.com

Trường Cao đẳng Kỹ thuật Công nghệ Đồng Nai

Khoa Công nghệ thông tin

NHẬP MÔN LẬP TRÌNH

CON TRỎ (CƠ BẢN)

VC &

BB

22

Nội dung

Khái niệm và cách sử dụng

1

Các cách truyền đối số cho hàm

2

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

3

Con trỏ và cấu trúc

4

Trang 2

VC &

BB

33

Khai báo con trỏ

Khai báo

 Giống như mọi biến khác, biến con trỏ muốn sử dụng cũng cần phải được khai báo

Ví dụ

 ch1 và ch2 là biến con trỏ, trỏ tới vùng nhớ kiểu char (1 byte)

 p1 là biến con trỏ, trỏ tới vùng nhớ kiểu int (2 bytes) còn p2 là biến kiểu int bình thường

NMLT - Con trỏ cơ bản

<ki ể u d ữ li ệ u> * <tên bi ế n con tr ỏ >;

char * ch1, * ch2;

int * p1, p2;

VC &

BB

44

Con trỏ NULL

Khái niệm

NULL

int n;

int *p1 = &n;

int *p2; // unreferenced local varialbe

int *p3 = NULL;

Trang 3

VC &

BB

55

Khởi tạo kiểu con trỏ

Khởi tạo

nào đó (không biết trước)

 trỏ đến vùng nhớ không biết trước

 Đặt địa chỉ của biến vào con trỏ (toán tử &)

Ví dụ

NMLT - Con trỏ cơ bản

<tên bi ế n con tr ỏ > = & <tên bi ế n>;

int a, b;

int *pa = & a, *pb;

pb = & b;

VC &

BB

66

Sử dụng con trỏ

Truy xuất đến ô nhớ mà con trỏ trỏ đến

Ví dụ

NMLT - Con trỏ cơ bản

int a = 5, *pa = & a;

printf( “ %d\n ” , pa); // Giá tr ị bi ế n pa

printf( “ %d\n ” , *pa); // Giá tr ị vùng nh ớ pa tr ỏ đế n printf( “ %d\n ” , &pa); // Đị a ch ỉ bi ế n pa

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

0B 00 00 00

05 00 00 00

Trang 4

VC &

BB

77

Kích thước của con trỏ

Kích thước của con trỏ

trỏ là như nhau:

• Môi trường MD-DOS ( 16 bit ): 2 bytes

• Môi trường Windows ( 32 bit ): 4 bytes

NMLT - Con trỏ cơ bản

char * p1;

int * p2;

float *p3;

double *p4;

VC &

BB

88

Các cách truyền đối số

Truyền giá trị (tham trị)

#include <stdio.h>

void hoanvi(int x, int y);

void main()

{

int a = 5; b = 6;

hoanvi(a, b);

printf( “ a = %d, b = %d ” , a, b);

}

void hoanvi( int x , int y )

{

int t = x; x = y; y = t;

}

Trang 5

VC &

BB

99

Các cách truyền đối số

Truyền tham chiếu

NMLT - Con trỏ cơ bản

#include <stdio.h>

void hoanvi(int & x, int & y);

void main()

{

int a = 5; b = 6;

hoanvi(a, b);

printf( “ a = %d, b = %d ” , a, b);

}

void hoanvi(int & x, int & y)

{

int t = x; x = y; y = t;

}

VC &

BB

10

Các cách truyền đối số

Truyền địa chỉ (con trỏ)

#include <stdio.h>

void hoanvi(int * x, int * y);

void main()

{

int a = 5; b = 6;

hoanvi( & a, & b);

printf( “ a = %d, b = %d ” , a, b);

}

void hoanvi(int * x, int * y)

{

int t = * x; * x = * y; * y = t;

}

Trang 6

VC &

BB

11

Một số lưu ý

Một số lưu ý

C Mức độ thành thạo C được đánh giá qua mức

độ sử dụng con trỏ

 Nắm rõ quy tắc sau, ví dụ int a, *pa = &a;

• *pa và a đều chỉ nội dung của biến a.

• pa và &a đều chỉ địa chỉ của biến a.

 Không nên sử dụng con trỏ khi chưa được khởi tạo Kết quả sẽ không lường trước được

NMLT - Con trỏ cơ bản

VC &

BB

12

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

Mảng một chiều

 không thể thay đổigiá trị của hằng này

array ==&array[0]

int array[3];

array

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

Trang 7

VC &

BB

13

Con trỏ đến mảng một chiều

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

NMLT - Con trỏ cơ bản

int array[3], *parray;

parray = array; // Cách 1

parray = &array[0]; // Cách 2

array

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

18 19 1A 1B 1C 1D 1E 1F

parray

0B 00 00 00

VC &

BB

14

Phép cộng (tăng)

 + n  + n * sizeof(<kiểu dữ liệu>)

+2 Phép toán số học trên con trỏ

p = array

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

+1

int array [3];

Trang 8

VC &

BB

15

Phép trừ (giảm)

 – n  – n * sizeof(<kiểu dữ liệu>)

Phép toán số học trên con trỏ

NMLT - Con trỏ cơ bản

p = &array[2]

–1 –2

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

int array [3];

VC &

BB

16

Các phép toán khác

(thứ tự ô nhớ)

• == !=

• > >=

• < <=

Phép toán số học trên con trỏ

Trang 9

VC &

BB

17

Truy xuất đến phần tử thứ n của mảng (không sử dụng biến mảng)

 array[n] == p[n] == *(p + n)

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

NMLT - Con trỏ cơ bản

p

0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

int array [3], *p;

+ 2 )

(

*

VC &

BB

18

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

Ví dụ nhập - xuất mảng

NMLT - Con trỏ cơ bản

void nhap(int *a, int &n)

{ printf("\n nhap so phan tu: ");

scanf("%d",&n);

for (int i = 0; i<n; i++)

{

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

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

}

}

void xuat(int *a, int n)

{ for (int i = 0; i<n; i++)

printf( “ %d ” a[i] );

}

void main()

{ int n = 10, *a;

nhap(a,n); xuat (a,n) ;

}

Trang 10

VC &

BB

19

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

Ví dụ nhập - xuất mảng

NMLT - Con trỏ cơ bản

void nhap(int *a, int &n)

{ printf("\n nhap so phan tu: ");

scanf("%d",&n);

for (int i = 0; i<n; i++)

{

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

scanf("%d", &*a++ );

}

}

void xuat(int *a, int n)

{ for (int i = 0; i<n; i++)

printf( “ %d ” *a++ );

}

void main()

{ int n = 10, *a;

nhap(a,n); xuat (a,n) ;

}

VC &

BB

20

Con trỏ và chuỗi

Ví dụ Chuong trinh nhap va in ra ten*

#include <stdio.h>

#include <conio.h>

void main()

{

char *strChao = "Chao ban";

char strTen[30];

puts("Cho biet ten cua ban: ");

gets(strTen);

puts(strChao);

puts(strTen);

getch();

}

Trang 11

VC &

BB

21

Bài tập lý thuyết

Bài 1: Cho đoạn chương trình sau:

int a = 234;

int *ptr_a;

ptr_a = &a;

Hãy cho biết giá trị của:

b *ptr_a // printf("%d ", *ptr_a);

c &ptr_a // printf("%d ", &ptr_a);

d &a // printf("%d ", &a);

e *a // printf("%d ", *a);

Tin học cơ sở 2 - Đặng Bình Phương

VC &

BB

22

Bài tập lý thuyết

Bài 2: Kết quả ?

#include<stdio.h>

#include<conio.h>

void main()

{

int *x, y = 2;

*x = y;

*x += y; // (1)

y++; // (2)  *x += y++;

printf("%d %d", *x, y);

getch();

}

Trang 12

VC &

BB

23

Bài tập lý thuyết

một biến?

do con trỏ trỏ đến?

bộ nhớ như thế nào?

lấy địa chỉ phần tử đầu tiên của mảng này

Tin học cơ sở 2 - Đặng Bình Phương

VC &

BB

24

Bài tập lý thuyết

chiều Trình bày hai cách nhận biết phần tử cuối của mảng?

con trỏ?

trỏ p2 trỏ đến phần tử thứ 4 của mảng int p2 – p1 =

?

float?

Trang 13

VC &

BB

25

Bài tập

kiểu char

con trỏ pcost trỏ đến biến này

cách trực tiếp và gián tiếp

nó trỏ tới

mảng một chiều

Tin học cơ sở 2 - Đặng Bình Phương

VC &

BB

26

Bài tập lý thuyết

Bài 15: Cho đoạn chương trình sau:

int *pint;

float a;

char c;

double *pd;

Hãy chọn phát biểu sai cú pháp:

a a = *pint;

b c = *pd;

c *pint = *pd;

d pd = a;

Trang 14

VC &

BB

27

Bài tập thực hành

Bài 16:Viết chương trình nhập số nguyên dương n gồm k chữ số (0 < k ≤ 5) , sắp xếp các chữ số của n theo thứ tự tăng dần

Ví dụ:

Tin học cơ sở 2 - Đặng Bình Phương

Ngày đăng: 03/12/2015, 20:50

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm