lecture06 pointer string
DESCRIPTION
CTRANSCRIPT
-
Con tr - Pointer
-
Con tr Pointer n Khai bo n Cc ton t &, *, =, + n Nhc li v truyn tham s a ch n Con tr v mng n Cp pht vng nh ng
-
Con tr Mt s l do nn s dng n Con tr l kiu d liu lu tr a ch ca cc
vng d liu trong b nh my tnh n Kiu con tr cho php:
Truyn tham s kiu a ch Biu din cc kiu, cu trc d liu ng Lu tr d liu trong vng nh heap
n Con tr c s dng trong hm scanf
-
Con tr Khai bo trong C Kiu con tr phi c nh ngha trn mt kiu c s c nh ngha trc .
typedef kiucs *Tnkiu; typedef int *PINT; //PINT l kiu con tr - a ch vng nh kiu int
int x; PINT p; //p, p1: bin kiu int * int *p1;
-
int *pi; long int *p; float *pf; char c, d, *pc; /* c v d kiu char
pc l con tr n char */ double *pd, e, f; /* pd l con tr n double
e and f are double */ char *start, *end;
Con tr Khai bo trong C
-
0x91A2
0x1132
Con tr - Ton t & n &: ton t ly a ch ca 1 bin n a ch ca tt c cc bin trong chng trnh u
c ch nh t khi khai bo
char g = 'z'; int main() {
char c = 'a'; char *p; p = &c; p = &g; return 0;
}
p c 'a'
0x1132
p g 'z'
0x91A2
-
n *: ton t truy xut gi tr ca vng nh c qun l bi con tr.
#include char g = 'z'; int main() {
char c = 'a'; char *p; p = &c; printf("%c\n", *p); p = &g; printf("%c\n", *p); return 0;
}
a z
xut gi tr do p ang qun l
Con tr - Ton t *
0x91A2
0x1132 p c
'a' 0x1132
p g 'z'
0x91A2
-
Con tr - Truyn tham s a ch #include void change(int *v); int main() {
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));
}
-
Con tr NULL n Gi tr c bit ch rng con tr khng qun l vng
no. Gi tr ny thng c dng ch mt con tr khng hp l.
#include int main() {
int i = 13; short *p = NULL; if (p == NULL) printf(Con tr khng hp l!\n"); else printf(Gi tr : %0xi\n", *p); return 0;
}
-
0x15A0
0x15A4
0x15A0
Con tr - Ton t gn = n C s khc bit rt quan trng khi thc hin cc php gn:
int i = 10, j = 14; int *p = &i; int *q = &j; *p = *q;
int i = 10, j = 14; int *p = &i; int *q = &j; p = q;
v:
p i 10
0x15A0 14
q j
0x15A4 14
p i 10
0x15A0 q j 0x15A4
0x15A4 14
0x15A4
-
Luyn tp in vo trng int main(void) {
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
-
Con tr v Mng n Bin kiu mng l a ch tnh ca mt vng nh, c xc
nh khi khai bo, khng thay i trong sut chu k sng. n Bin con tr l a ch ng ca mt vng nh, c xc
nh qua php gn a ch khi chng trnh thc thi. #include int main() {
int a[10] = {1, 3, 4, 2, 0}; int *p; p = a; //a = p: sai printf(0x%08X %i 0x%08X %i\n, ); a, a[0], p, *p); return 0;
}
-
3 4
0x15A0 0x15A2
Con tr - Ton t + vi s nguyn #include int main() {
short a[10] = {1, 3, 5, 2, 0}; short *p = a; printf(0x%08X %i 0x%08X %i\n, ); a, a[0], p, *p); p ++; printf(0x%08X %i 0x%08X %i\n, ); a, a[0], p, *p); (*p) ++; printf(0x%08X %i 0x%08X %i\n, ); a, a[0], p, *p); return 0;
}
1
5 2 0
a
0x15A0
p 0x16B2
-
Con tr - Luyn tp #include 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]); p ++; a[2] = 9; 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
-
Con tr - Cp pht vng nh ng
#include int main() {
int *p = malloc(10*sizeof(int)); p[0] = 1; p[3] = -7; free(p); return 0;
}
n C th ch nh vng mi cho 1 con tr qun l bng cc lnh hm malloc (memory-alloc), calloc (clear-alloc) hoc ton t new ca C++
n Vng nh do lp trnh vin ch nh phi c gii phng bng lnh free (malloc, calloc) hoc ton t delete (new)
-
Tng kt
n Khai bo n Cc ton t &, *, =, + n Nhc li v truyn tham s a ch n Con tr v mng n Cp pht vng nh ng
-
Chui k t - String
-
Chui k t Strings n Mt s qui tc n Nhp / xut n Con tr v chui k t n Mt s hm th vin
-
Chui k t - Mt s qui tc n Chui k t l mng mt chiu c mi thnh phn l mt
s nguyn c kt thc bi s 0. n K t kt thc (0) cui chui k t thng c gi l
k t null (khng ging con tr NULL). C th ghi l 0 hoc \0 (khng phi ch o).
n c khai bo v truyn tham s nh mng mt chiu.
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";
first_name
last_name
other
characters
Chui k t - V d
'J' 'o' 'h' 'n' 0
'M' 'i' 'n' 'o' 'r' 0
'T' 'o' n
'y' 32 'B' 'l' 'u' 'r' 't' 0
'N' 'o' 32 'n' 'u' 'l' 'l' 0
-
n C th nhp / xut chui k t s bng cch nhp tng k t ca s
n Hoc s dng cc hm scanf v printf vi k t nh dng %s
n Nhp chui c khong trng dng hm gets
n scanf and gets have a potential overflow problem (use fgets(s, len, stdin) instead to specify the maximum buffer)
char name[100]; printf("Nhap mot chuoi ky tu %s: "); gets(name);
Chui k t - Nhp / xut
char other[] = "Tony Blurt"; printf("%s\n", other);
-
Lu : kt thc chui #include int main() {
char other[] = "Tony Blurt";
printf("%s\n", other);
other[4] = '\0';
printf("%s\n", other);
return 0; }
Tony Blurt Tony
other
"Blurt" s khng c in ra
'T' 'o' n
'y' 32 'B' 'l' 'u' 'r' 't' 0
-
Chui k t Mt s hm th vin n Ly di chui
l = strlen(s); n i ton b cc k t ca chui thnh IN HOA
strupr(s); n i ton b cc k t ca chui thnh in thng
strlwr(s);
-
Chui k t Mt s hm th vin n So snh chui: so snh theo th t t in Phn bit IN HOA in thng: int strcmp(const char *s1, const char *s2);
Khng phn bit IN HOA in thng: int stricmp(const char *s1, const char *s2);
-
#include #include int main() {
char s1[] = "Minor"; char s2[] = "Tony"; 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;
}
Chui k t v d strcmp
Minor < Tony
-
Chui k t Mt s hm th vin n Gn ni dung chui:
o Chp ton b chui source sang chui dest: int strcpy(char *dest, const char *src);
o Chp ti a n k t t source sang dest: int strncpy(char *dest, const char *src, int n);
n To chui mi t chui c:
char *strdup(const char *src);
-
#include #include 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;
}
Chui k t v d strcpy
Tony Blurt To123Blurt Blurt
-
Chui k t Mt s hm th vin n Ni chui:
char *strcat(char *dest, const char *src);
n Tch chui:
char *strtok(char *s, const char *sep);
Tr v a ch ca on u tin. Mun tch on k tip tham s th nht s l NULL
-
#include #include #define SEPARATOR "., " int main() {
char s[]= "Thu strtok: 9,123.45"; char *p; p = strtok(s, SEPARATOR); while (p != NULL) { printf("%s\n", p); p = strtok(NULL, SEPARATOR); } return 0;
}
Chui k t v d strtok
Thu strtok: 9 123 45
-
Chui k t Mt s hm th vin n Tm mt k t trn chui:
char *strchr(const char *s, int c); n Tm mt on k t trn chui:
char *strstr(const char *s1, const char *s2);
-
#include #include 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;
}
Chui k t v d tm kim
m kiem chuoi em chuoi
-
#include #include 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, "123"); printf("%s\n", s); StrIns(s + 8, "45"); printf("%s\n", p); return 0;
}
Chui k t chn mt on k t
123 Thu chen 123 Thu 45chen
-
#include void StrDel(char *s, int n) {
memmove(s, s + n, strlen(s+n)+1); } int main() {
char s[]= "Thu xoa 12345"; StrDel(s, 4); printf("%s\n", s); StrDel(s + 4, 3); printf("%s\n", p); return 0;
}
Chui k t xa mt on k t
xoa 12345 xoa 45
-
Tng kt
n Khai bo n Nhp / xut n Con tr v chui k t n Mt s hm th vin n Chn / loi b mt on con