1.指標的宣告
syntax: 指標資料型態 *指標名稱
eg.
2.配置記憶體(malloc-memory allocation)
指標變數在儲存資料前,需先配置記憶體空間才可使用。
syntax: 指標名稱=(指標資料型態 *)malloc(sizeof(指標資料型態)*長度)
eg.
int *no;
char *str;
//配置 4 int 的空間
no=(int *)malloc(sizeof(int)*4);
//配置 20 char 的空間
str=(char *)malloc(sizeof(char)*20)
|
3.存取指標所指向的資料-解參(dereference)
指標變數所儲存的是資料所在的記憶體位址,當在指標變數前加上*,即可存取其所指的資料,
syntax: *指標名稱
eg.
//a為一般的整數變數,ptr_a為指標變數
int a=5,*ptr_a;
//將ptr_a指向a的位址(注意,在此不需另外配置記憶體,為甚麼?)
ptr_a=&a;
//*ptr_a=a+1
(*ptr_a)++;
//印出 ptr_a,a的內容
printf("ptr_a=%x,*ptr_a=%d,&a=%x,a=%d",ptr_a,*ptr_a,&a,a);
|
4.釋放所配置的記憶體空間(delete)
因為電腦的記憶體空間有限,若要有效的利用,可釋放不用的指標變數。
(雖然理論上在程式結束後,所有的空間都會被自動釋放)
syntax: delete(指標名稱)
eg.
char *name;
//配置 8 char 的空間
name=(char *)malloc(sizeof(char)*8);
//將"Alibaba"複製至name陣列中
strcpy(name,"Alibaba");
//暫時釋放空間
delete(name);
//重新配置更大的空間 20 char
name=(char *)malloc(sizeof(char)*20);
//將"Snow White"複製至name陣列中
strcpy(name,"Snow White");
//養成好習慣,釋放配置過的空間。
delete(name);
|
5.指標的用途
5.1可以讓函數用傳址呼叫(pass by address)的方式來傳地參數,如此在函數內的改變可以影響到參數。
5.2透過動態地配置(malloc)與釋放(delete)記憶體,可以更有效地利用記憶體空間。
5.3可以用來模擬一些較進階的程式技巧及資料結構,如樹(tree),串列(link-list)等。
6.想一想