1. 程式人生 > >二重指標為什麼需要動態分配空間

二重指標為什麼需要動態分配空間

指標的概念:建立一個指標型別的資料,在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

總結:

二重指標需要動態分配記憶體空間。