1.指標的宣告
syntax: 指標資料型態 *指標名稱
eg.
int *no; char *str;
|
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 charname=(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.想一想