Download presentation
Presentation is loading. Please wait.
1
指標 Pointers
2
int a = 5; int * ptr; // pointer to int ptr = &a; // 取a位址 // int *ptr = &a; *ptr = 10; // 設定指向位址的值 printf(“a = %d\n”, a); // a = 10
3
int a = 5; int * ptr = &a; *ptr = 10; ptr 位址 1236 1240 1244 1248 1252
1256 值 ?? 1304 a 位址 1296 1300 1304 1308 1312 1316 值 ?? 10 5
4
小心 int* a, b; // X: b is int!! int *a, *b; // O
5
小心 Segmentation fault int * ptr; … *ptr = 10; ptr 位址 1236 1240 1244
1248 1252 1256 值 ?? ??
6
好習慣 int *ptr = NULL; … if(ptr==NULL){ /* error */ } else *ptr = 10;
7
指標&陣列 char s[16]; char *ptr = s; // 相當於ptr = &s[0]; strcpy(s, “OAO”);
printf(“%s\n”, ptr); // OAO putchar(ptr[1]); // A
8
動態記憶體配置 C style: malloc(), free() int *ptr = malloc(100*sizeof(int));
for(int i=0; i<100; i++) ptr[i] = i; free(ptr); C++ style: new[], delete[] int *ptr = new int[100]; for(int i=0; i<100; i++) ptr[i] = i; delete [] ptr;
9
小心 int arr[100]; memset(arr, 0, sizeof(arr));
// sizeof(arr) == sizeof(int[100]) // (400 bytes) int *ptr = new int[100]; memset(ptr, 0, sizeof(ptr)); // sizeof(ptr) == sizeof(int*) // (4 bytes)
10
struct struct XD { int a, b; }; XD xd; xd.a = 2; XD *ptr = &xd;
ptr->b = 3; // or (*ptr).b
11
你可以… void my_strcpy(char *dst, char *src) {
for(; *src!=‘\0’; dst++, src++) *dst = *src; } char s1[16], s2[16]; scanf(“%s”, s2); my_strcpy(s1, s2); // my_strcpy(&s1[0], &s2[0])
12
pointer to pointer int **pp, *p, a; p = &a; pp = &p;
13
array of pointers int *pa[20], n; pa[2] = &n;
14
pointer to array int (*pa)[20], arr[20]; pa = &arr;
15
你可以… int *mat[20], n; scanf(“%d”, &n); for(int i=0; i<20; i++)
mat[i] = new int[n]; mat[3][n-2] = 8; delete [] mat[i];
16
你可以… int **mat, n, m; scanf(“%d%d”, &n, &m); mat = new int*[n];
for(int i=0; i<n; i++) mat[i] = new int[m]; mat[n-2][m-3] = 100; delete [] mat[i]; delete [] mat;
17
你不可以… void proc(int **mat){ mat[2][3] = 5; } int main() { …
proc(mat); // error } gcc: cannot convert ‘int(*)[20]’ to ‘int**’
18
你可以… void proc(int (*mat)[20]); void proc(int mat[20][20]); ***不建議***
19
結語 善用指標,可以讓程式更簡潔易懂、更好維護 亂用指標 → 輕鬆RE
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.