1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng nhập môn lập trình con trỏ, chuỗi trần phước tuấn

17 148 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 17
Dung lượng 258,2 KB

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

Nội dung

Trang 1

tranphuoctuan.khoatoan.dhsp@gmail.com http://baigiang.tranphuoctuan.com

Khai báo Các toán t “ & ”, “ * ”, “=”, “+”

Nh c l i v truy n tham s a ch Con tr và m ng

C p phát vùng nh ng

Trang 2

NH P MÔN L P TRÌNH 12/23/2009 3

Con tr là ki u d li u l u tr a ch c a các vùng

d li u trong b nh máy tính

Ki u con tr cho phép:

Truy n tham s ki u a ch

Bi u di n các ki u, c u trúc d li u ng

u tr d li u trong vùng nh heap Con tr ã c s d ng trong hàm scanf

Ki u con tr ph i c nh ngh a trên m t ki u c s ã

c nh ngh a tr c ó.

//PINT là ki u con tr - a ch vùng nh ki u int

Trang 3

NH P MÔN L P TRÌNH 12/23/2009 5

long int *p;

e and f are double */

long int *p;

e and f are double */

0x91A2 0x1132

Con tr - Toán t “ &

& ”: toán t l y a ch c a 1 bi n

a ch c a t t c các bi n trong ch ng trình u ã

c ch nh t khi khai báo char g = 'z';

{

char c = 'a';

char *p;

p = &c;

p = &g;

return 0;

}

char g = 'z';

{

char c = 'a';

char *p;

p = &c;

p = &g;

return 0;

}

'a' 0x1132

'z' 0x91A2

Trang 4

NH P MÔN L P TRÌNH 12/23/2009 7

* ”: toán t truy xu t giá tr c a vùng nh c qu n lý

b i con tr

#include <stdio.h>

char g = 'z';

{

char c = 'a';

char *p;

p = &c;

printf("%c\n", *p);

p = &g;

printf("%c\n", *p);

return 0;

}

#include <stdio.h>

char g = 'z';

{

char c = 'a';

char *p;

p = &c;

printf("%c\n", *p);

p = &g;

printf("%c\n", *p);

return 0;

}

a z

a z

xu t giá tr do p ang

qu n lý

0x91A2

0x1132

'a' 0x1132

'z' 0x91A2

#include <stdio.h>

{

int var = 5;

change(&var);

printf("main: var = %i\n", var);

return 0;

}

void change(int *v) {

(*v) *= 100;

printf("change: *v = %i\n", (*v));

}

#include <stdio.h>

{

int var = 5;

change(&var);

printf("main: var = %i\n", var);

return 0;

}

void change(int *v) {

(*v) *= 100;

printf("change: *v = %i\n", (*v));

}

Trang 5

NH P MÔN L P TRÌNH 12/23/2009 9

Giá tr c bi t ch r ng con tr không qu n lý vùng nào Giá tr này th ng c dùng ch m t con tr không h p l

#include <stdio.h>

int main() {

int i = 13;

if (p == NULL)

else

return 0;

}

#include <stdio.h>

int main() {

int i = 13;

if (p == NULL)

else

return 0;

}

0x15A0

0x15A4 0x15A0

Có s khác bi t r t quan tr ng khi th c hi n các phép gán:

int* p = &i;

*p = *q;

int* p = &i;

*p = *q;

p = q;

p = q;

và:

10

10 0x15A0

0x15A4

0x15A4

14 0x15A4

Trang 6

NH P MÔN L P TRÌNH 12/23/2009 11

{

int i = 10, j = 14, k;

int *p = &i;

int *q = &j;

*p += 1;

p = &k;

*p = *q;

p = q;

*p = *q;

return 0;

}

{

int i = 10, j = 14, k;

int *p = &i;

int *q = &j;

*p += 1;

p = &k;

*p = *q;

p = q;

*p = *q;

return 0;

}

i 0x2100

j 0x2104

k 0x1208

p 0x120B

q 0x1210

Bi n ki u m ng là a ch t nh c a m t vùng nh , c xác

nh khi khai báo, không thay i trong su t chu k s ng.

Bi n con tr là a ch ng c a m t vùng nh , c xác

nh qua phép gán a ch khi ch ng trình th c thi.

#include <stdio.h>

int main() {

int a[10] = {1, 3, 4, 2, 0};

int *p;

p = a; //a = p: sai

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

return 0;

}

#include <stdio.h>

int main() {

int a[10] = {1, 3, 4, 2, 0};

int *p;

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

return 0;

}

Trang 7

NH P MÔN L P TRÌNH 12/23/2009 13

3

0x15A0

#include <stdio.h>

int main()

{

short a[10] = {1, 3, 5, 2, 0};

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

p ++;

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

(*p) ++;

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

return 0;

}

#include <stdio.h>

int main()

{

short a[10] = {1, 3, 5, 2, 0};

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

p ++;

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

(*p) ++;

printf(“0x%04X %i 0x%04X %i\n“, );

a, a[0], p, *p);

return 0;

}

1

5 2 0 a

0x15A0

p

0x16B2

#include <stdio.h>

int main()

{

int a[10] = {2, 3, 5, 1, 4, 7, 0};

int *p = a;

printf(“%i %i\n“, a[0], *p);

p ++;

printf(“%i %i\n“, *p, p[2]);

printf(“%i %i\n“, p[1], *p);

p -= 2;

printf(“%i %i\n”, p[3], p[1]);

return 0;

}

#include <stdio.h>

int main()

{

int a[10] = {2, 3, 5, 1, 4, 7, 0};

int *p = a;

printf(“%i %i\n“, a[0], *p);

p ++;

printf(“%i %i\n“, *p, p[2]);

printf(“%i %i\n“, p[1], *p);

p -= 2;

printf(“%i %i\n”, p[3], p[1]);

return 0;

}

2 2

3 1

1 9

1 3

2 2

3 1

1 9

1 3

Trang 8

NH P MÔN L P TRÌNH 12/23/2009 15

#include <stdio.h>

{

int *p = new int[10];

p[0] = 1;

p[3] = -7;

delete []p;

return 0;

}

#include <stdio.h>

{

int *p = new int[10];

p[0] = 1;

p[3] = -7;

delete []p;

return 0;

}

Có th ch nh vùng m i cho 1 con tr qu n lý b ng các

l nh hàm malloc, calloc ho c toán t new c a C++

Vùng nh do l p trình viên ch nh ph i c gi i phóng

b ng l nh free (malloc, calloc) ho c toán t delete (new)

Khai báo Các toán t “ & ”, “ * ”, “=”, “+”

Nh c l i v truy n tham s a ch Con tr và m ng

C p phát vùng nh ng

Trang 9

Chu i ký t - String

M t s qui t c

Nh p / xu t Con tr và chu i ký t

M t s hàm th vi n

Trang 10

NH P MÔN L P TRÌNH 12/23/2009 19

Chu i ký t là m ng m t chi u có m i thành ph n là m t

s nguyên c k t thúc b i s 0.

Ký t k t thúc (0) cu i chu i ký t th ng c g i là

ký t null (không gi ng con tr NULL) Có th ghi là 0

ho c ‘\0’ (không ph i ch o).

c khai báo và truy n tham s nh m ng m t chi u.

char s[100];

unsigned char s1[1000];

char first_name[5] = { 'J', 'o', 'h', 'n', '\0' }; char last_name[6] = "Minor";

char other[] = "Tony Blurt";

char characters[7] = "No null";

char first_name[5] = { 'J', 'o', 'h', 'n', '\0' }; char last_name[6] = "Minor";

char other[] = "Tony Blurt";

char characters[7] = "No null";

first_name

last_name

other characters

0 'n' 'h' 'o' 'J'

0 'r' 'o' 'n' 'i' 'M'

'y'

‘n’

'o' 'T'

'u' 'n' 32 'o' 'N'

Trang 11

NH P MÔN L P TRÌNH 12/23/2009 21

Có th nh p / xu t chu i ký t s b ng cách nh p t ng ký

t c a s

Ho c s d ng các hàm scanf printf v i ký t nh

d ng “%s”

Nh p chu i có kho ng tr ng dùng hàm gets

printf("Nhap mot chuoi ky tu %s: ");

gets(name);

char name[100];

printf("Nhap mot chuoi ky tu %s: ");

gets(name);

printf("%s\n", other);

char other[] = "Tony Blurt";

printf("%s\n", other);

#include <stdio.h>

{

char other[] = "Tony Blurt";

printf("%s\n", other);

other[4] = '\0';

printf("%s\n", other);

return 0;

}

#include <stdio.h>

{

char other[] = "Tony Blurt";

printf("%s\n", other);

other[4] = '\0';

printf("%s\n", other);

return 0;

}

Tony Blurt Tony

Tony Blurt Tony

other

"Blurt" s không

c in ra

'y'

‘n’

'o' 'T'

Trang 12

NH P MÔN L P TRÌNH 12/23/2009 23

L y dài chu i

i toàn b các ký t c a chu i thành IN HOA

strupr(s);

i toàn b các ký t c a chu i thành in th ng

strlwr(s);

So sánh chu i: so sánh theo th t t i n

Phân bi t IN HOA – in th ng:

int strcmp(const char *s1, const char *s2);

Không phân bi t IN HOA – in th ng:

int stricmp(const char *s1, const char *s2);

Trang 13

NH P MÔN L P TRÌNH 12/23/2009 25

#include <stdio.h>

int main()

{

int cmp = strcmp(s1, s2);

if (cmp < 0)

printf("%s < %s", s1, s2);

else

if (cmp == 0)

printf("%s = %s", s1, s2);

else

printf("%s > %s", s1, s2);

return 0;

}

#include <stdio.h>

int main()

{

int cmp = strcmp(s1, s2);

if (cmp < 0)

printf("%s < %s", s1, s2);

else

if (cmp == 0)

printf("%s = %s", s1, s2);

else

printf("%s > %s", s1, s2);

return 0;

}

Minor < Tony

Gán n i dung chu i:

o Chép toàn b chu i source sang chu i dest:

int strcpy(char *dest, const char *src);

o Chép t i a n ký t t source sang dest:

int strncpy(char *dest,

const char *src, int n);

T o chu i m i t chu i ã có:

char *strdup(const char *src);

Trang 14

NH P MÔN L P TRÌNH 12/23/2009 27

#include <stdio.h>

int main()

{

char s[] = "Tony Blurt";

char s2[100], *s3;

strcpy(s2, s);

printf("%s\n", s2);

strncpy(s2 + 2, "12345", 3);

printf("%s\n", s2);

s3 = strdup(s + 5);

printf("%s\n", s3);

free(s3);

return 0;

}

#include <stdio.h>

int main()

{

char s[] = "Tony Blurt";

char s2[100], *s3;

strcpy(s2, s);

printf("%s\n", s2);

strncpy(s2 + 2, "12345", 3);

printf("%s\n", s2);

s3 = strdup(s + 5);

printf("%s\n", s3);

free(s3);

return 0;

}

Tony Blurt To123Blurt Blurt

Tony Blurt To123Blurt Blurt

N i chu i:

char *strcat(char *dest,

const char *src);

Tách chu i:

char *strtok(char *s,

const char *sep);

Tr v a ch c a o n u tiên Mu n tách o n k ti p tham s th nh t s là NULL

Trang 15

NH P MÔN L P TRÌNH 12/23/2009 29

#include <stdio.h>

#define SEPARATOR "., "

int main()

{

char s[]= "Thu strtok: 9,123.45";

char *p;

p = strtok(s, SEPARATOR);

printf("%s\n", p);

p = strtok(NULL, SEPARATOR);

} return 0;

}

#include <stdio.h>

#define SEPARATOR "., "

int main()

{

char s[]= "Thu strtok: 9,123.45";

char *p;

p = strtok(s, SEPARATOR);

printf("%s\n", p);

p = strtok(NULL, SEPARATOR);

} return 0;

}

Thu strtok: 9

123 45

Thu strtok: 9

123 45

Tìm m t ký t trên chu i:

char *strchr(const char *s, int c);

Tìm m t o n ký t trên chu i:

char *strstr(const char *s1,

const char *s2);

Trang 16

NH P MÔN L P TRÌNH 12/23/2009 31

#include <stdio.h>

int main() {

char s[]= "Thu tim kiem chuoi";

char *p;

p = strchr(s, 'm');

printf("%s\n", p);

p = strstr(s, "em");

printf("%s\n", p);

return 0;

}

#include <stdio.h>

int main() {

char s[]= "Thu tim kiem chuoi";

char *p;

p = strchr(s, 'm');

printf("%s\n", p);

p = strstr(s, "em");

printf("%s\n", p);

return 0;

}

m kiem chuoi

em chuoi

m kiem chuoi

em chuoi

#include <stdio.h>

void StrIns(char *s, char *sub)

{

int len = strlen(sub);

memmove(s + len, s, strlen(s)+1);

strncpy(s, sub, len);

}

int main()

{

char s[]= "Thu chen";

StrIns(s + 8, "45"); printf("%s\n", p);

return 0;

#include <stdio.h>

void StrIns(char *s, char *sub)

{

int len = strlen(sub);

memmove(s + len, s, strlen(s)+1);

strncpy(s, sub, len);

}

int main()

{

char s[]= "Thu chen";

StrIns(s + 8, "45"); printf("%s\n", p);

return 0;

}

123 Thu chen

123 Thu 45chen

123 Thu chen

123 Thu 45chen

Trang 17

NH P MÔN L P TRÌNH 12/23/2009 33

#include <stdio.h>

void StrDel(char *s, int n)

{

memmove(s, s + n, strlen(s+n)+1);

}

int main()

{

char s[]= "Thu xoa 12345";

return 0;

}

#include <stdio.h>

void StrDel(char *s, int n)

{

memmove(s, s + n, strlen(s+n)+1);

}

int main()

{

char s[]= "Thu xoa 12345";

return 0;

}

xoa 12345 xoa 45

xoa 12345 xoa 45

Khai báo

Nh p / xu t Con tr và chu i ký t

M t s hàm th vi n Chèn / lo i b m t o n con

Ngày đăng: 03/01/2016, 10:24

TỪ KHÓA LIÊN QUAN

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