Record10 指標的輸入輸出特性

2021-10-01 16:12:44 字數 2496 閱讀 3111

目錄

理解指標必須和記憶體四區的概念相結合才能透徹

指標的輸入輸出特性案例(1級指標作輸出)

應用指標必須和函式呼叫相結合(指標作函式引數)

總體**

1.主調函式 被調函式

a)主調函式可把堆區、棧區、全域性資料記憶體位址傳給被呼叫函式

b)被呼叫函式只能返回堆區、全域性資料

2.記憶體分配方式

a)指標做函式引數,是有輸入和輸出特性的。如果是在主呼叫函式裡面分配記憶體,把記憶體傳給被呼叫函式,這種用法,叫指標的輸入;如果是在被呼叫函式中分配的記憶體,同時把結果傳到已分配的記憶體裡面,然後,再輸出讓主呼叫函式使用,這種叫作指標的輸出

在被呼叫函式中分配記憶體,理解指標的關鍵在於看記憶體是如何分配的。以下程式為例,通過看出在被呼叫函式中分配記憶體,可以看出這下面的示例是作輸出的,同時看成這個被呼叫介面的2級指標是作輸出的。也就是在被呼叫函式裡面,須修改實參1級指標的值。看到2級指標的時候,要兵分兩路,一路看2級指標在被呼叫函式的部分,一路看2級指標在主函式的部分(在主函式中要把1級指標的值的位址傳入才行)。

int  getmem41(char **myp1/*out*/ , int *mylen1 /*out*/,  char **myp2 /*out*/, int *mylen2 /*out*/)

int main44()

printf("p1:%s \n", p1);

printf("p2:%s \n", p2);

if (p1 != null)

if (p2 != null)

printf("p1:%d \n", p1);

system("pause");

return ret;

}

注:返回值只能返回乙個結果,不能返回倆

char *  getmem42(int num)

int main44()

printf("p1:%d \n", p1);

system("pause");

return ret;

}

編號

指標函式引數

記憶體分配方式(級別+堆疊)

主調函式

實參被調函式

形參備註

011級指標

(做輸入)堆分配

使用一般應用禁用棧分配

使用常用

int showbuf(char *p);  

int showarray(int *array, int inum)

021級指標

(做輸出)棧使用

結果傳出

常用int gelen(char *pfilename, int *pfilelen);

032級指標

(做輸入)堆分配

使用一般應用禁用棧分配

使用常用

int main(int arc ,char *arg); 指標陣列

int shoumatrix(int [3][4], int iline);二維字串陣列

042級指標

(做輸出)堆使用

分配常用,但不建議用,轉化成02

int getdata(char **data, int *datalen);

int getdata_free(void *data);

int getdata_free(void **data); //避免野指標

053級指標

(做輸出)堆使用

分配不常用

int getfileallline(char ***content, int *pline);

int getfileallline_free(char ***content, int *pline);

dm04_指標的輸入和輸出特性.c

#define  _crt_secure_no_warnings 

#include #include #include //

int getmem41(char **myp1/*out*/ , int *mylen1 /*out*/, char **myp2 /*out*/, int *mylen2 /*out*/)

char * getmem42(int num)

int main44()

printf("p1:%s \n", p1);

printf("p2:%s \n", p2);

if (p1 != null)

if (p2 != null)

p1 = getmem42(100);

printf("p1:%s \n", p1);

if (p1 != null)

printf("p1:%d \n", p1);

system("pause");

return ret;

}

Record07 指標的本質是資料型別

目錄 指標是一種資料型別 指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 測試一下指標變數占用空間大小 p的含義 操作記憶體 p放在等號的左邊賦值 給記憶體賦值 p放在等號的右邊取值 從記憶體獲取值 指標變數和它指向的記憶體塊是兩個不同的概念 指標是一種資料型別,是指它指向的記憶體空間的資料型...

shell指令碼的輸入輸出 Linux 10

read命令。一般情況下,按下enter鍵,停止輸入。read option variable name常用引數如下 指令碼 如下 bin bash read t 10 p 請輸入您的姓名 name echo name read s pas echo pas 執行結果 在輸入pas引數值時,不會顯示...

C 字元指標的正確賦值和輸入輸出

如何給乙個字元指標 char p 賦值?我看到很多部落格上面寫的是這樣操作 char p p hello 在c語言中這種方式確實是被允許的,但是到c 11中會給出警告 報錯 錯誤提示的意思是我們將乙個字串常量繫結位址繫結到了乙個非常量字元指標上,c語言中隱式轉換成了char 但是c 就拒絕了這個操作...