二重指標為什麼需要動態分配空間
阿新 • • 發佈:2018-12-04
指標的概念:建立一個指標型別的資料,在64位系統中,一個指標型別的資料用8個位元組表示。指標型別的資料儲存某個資料的地址。編譯器,可以根據指標地址處理該地址的資料。
指標
關於指標,一個比較常用的地方就是字串的處理。字串的儲存示意圖如下所示。字串變數s其實是記錄了字串首字母的地址,指標p也是記錄了字串首字母的地址。
輸出字串時,printf(),讀入的地址認為是字串的首地址,遇到“\0”,認為時字串的結束。程式執行程式碼如下圖所示。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
char *s = "abcdefgh";
p = s;
printf("s:%s\n", s+1);
printf("len_of_point:%ld", sizeof(p));
}
輸出結果:
s:bcdefgh
len_of_point:8
二重指標
指標指向指標,但是二重指標並沒有規定所指向內容的長度,所以需要用動態分配記憶體的方式為其分配空間。二重指標(**p)的示意圖如下所示。
p指向指標陣列首地址,*p指向字串地址,**p指向字串首元素。
關於二重指標的程式碼如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char **p;
char s1[10] = {'1' , '2', '3', '4', '5'};
char * s2;
p = malloc(2);
s2 = "abcdefgh";
*p = s1;
p[1] = s2;
p[0][1] = '9';
printf("s:%s\n", p[0] + 1);
printf("len_of_point:%ld", sizeof(p));
free(p);
}
函式輸出如下:
s:9345
len_of_point:8
總結:
二重指標需要動態分配記憶體空間。