深入理解C語言指標(二)

2021-07-27 15:01:11 字數 1511 閱讀 1486

1.c語言記憶體分配

棧區(stack):由系統自動分配釋放,存放函式的引數值,區域性變數等資訊。

堆區(heap):由程式設計師分配釋放,系統會在程式結束時**。

全域性區(靜態區):全域性和靜態變數存放在這裡,由系統**。

文字常量區:存放常量字串,由系統**。

程式**區:。

c語言堆內空間申請函式為 malloc(size)

2.二級指標

一級指標型別如 int* ,那麼二級指標型別定義為 int** ,以此類推,當然**以上指標型別,我們應該會極少極少使用。

先分析一下二級指標型別的存在意義吧,我的理解是,它讓我們可以在另一函式中初始化乙個指標(因為c語言函式傳參是值傳遞)。先看一段**:

char* c1;

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

c1 = malloc(10);

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

輸出結果:

&c1 = 0x7fff52441c38

c1 = 0x0

&c1 = 0x7fff52441c38

c1 = 0x600000014960

char* c1;

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

c_init(c1);

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

void c_init(char* p)
輸出:

&c1 = 0x7fff59f42c38

c1 = 0x0

&p = 0x7fff59f42bc8

p = 0x0

&p = 0x7fff59f42bc8

p = 0x6000000de0d0

&c1 = 0x7fff59f42c38

c1 = 0x0

char* c1;

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

c_init(&c1);

printf("&c1 = %p\n",&c1);

printf("c1 = %p\n",c1);

void c_init(char** p)
輸出結果:

&c1 = 0x7fff5fb2fc38

c1 = 0x0

&c1 = 0x7fff5fb2fc38

c1 = 0x6000000dbdd0

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

C語言指標深入理解

前幾天看了乙個程式,裡面一段關於指標的 讓我非常糾結,看了很久才看懂,在這裡將將其記錄下來,希望能對大家有一定的幫助,先看示例程式 編譯器gcc include include include typedef struct list node list node,list,plist node st...