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...