二級指標做形參機制總結
本文對C 二級指標做形參的機制做了總結.
[@more@]很多 C programmer 對二級指標做形參比較困惑:
關於此,本人總結:
1 核心是地址和內容,要嚴格區分. 二級指標做形參更多用來完成兩個地址空間(二個程式或二個DLL)之間的地址傳遞. 高階程式如Apache 多用這種方法來完成地址的傳遞.
2
3
重點符號:
如果對彙編知識瞭解點,就好理解了.
看我做的測試例子:
#include
#include
#include
void GetMemory(char *p, int num)
{
printf("pre-0x%xn",&p);
printf("pre-0x%xn",p);
p = (char *)malloc(sizeof(char) * num);
printf("after-0x%xn",&p);
printf("after-0x%xn",p);
}
void Test(void) //此函式產生記憶體洩露
{
char *str = NULL;
printf("caller-0x%xn",&str);
GetMemory(str, 100); // str 仍然為 NULL
printf("caller-0x%xn",&str);
if(str!=NULL)
strcpy(str, "hello"); // 執行錯誤
}
void GetMemory2(char **p, int num)
{
printf("before(&p)-0x%xn",&p);
printf("before(p)-0x%xn",p);
printf("before(*p)-0x%xn",*p);
*p = (char *)malloc(sizeof(char) * num);
printf("after(&p)-0x%xn",&p);
printf("after(p)-0x%xn",p);
printf("after(*p)-0x%xn",*p);
}
void testinter(int **m)
{
printf("in stack=0x%xn",&m);
printf("in stack=0x%xn",m);
*m=(int*)malloc(sizeof(int));
**m=3;
}
void Test3(void)
{
int *p2=NULL;
testinter(&p2);
printf("after=0x%xn",&p2);
printf("after=0x%xn",p2);
printf("after=%dn",*p2);
}
void Test2(void)
{
char *str = NULL;
printf("caller(&str)-0x%xn",&str);
GetMemory2(&str, 100); // 注意引數是 &str,而不是str
printf("caller(&str)-0x%xn",&str);
printf("caller(str)-0x%xn",str);
if(str!=NULL)strcpy(str, "hello ok!!!!!n");
printf("%s",str);
free(str);
}
void main()
{
//分別測試.
//Test();
Test2();
//Test3();
}
執行結果:Test3:
----------------------------
in stack=0x13fed8
in stack=0x13ff28
after=0x13ff28
after=0x30fe0
after=3
------------------------------
Test2:
caller(&str)-0x13ff28
before(&p)-0x13fed4
before(p)-0x13ff28
before(*p)-0x0
after(&p)-0x13fed4
after(p)-0x13ff28
after(*p)-0x30fe0
caller(&str)-0x13ff28
caller(str)-0x30fe0
hello ok!!!!!
-----------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/784596/viewspace-1015634/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 二維陣列傳參做形參陣列
- golang二級指標操作連結串列Golang指標
- 指標總結指標
- 二進位制翻轉、結構體指標結構體指標
- 比如,一級指標、二級指標等,通過不同層級的指標資料指標
- C/C++指標總結C++指標
- iOS野指標定位總結iOS指標
- Linus:利用二級指標刪除單向連結串列指標
- 指標形參,C程式設計必須懂的東西指標C程式程式設計
- c++指標使用經驗總結之懸垂指標C++指標
- 二進位制小總結
- slub機制偽總結
- java機制總結 一Java
- mysql鎖機制總結MySql
- 新晉總監生存指南二——建立指標指標
- LC演算法技巧總結(二):雙指標和滑動視窗技巧演算法指標
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 【推薦系統】評估指標總結指標
- C語言指標部分教學總結C語言指標
- 二級指標,二維陣列函式引數傳遞指標陣列函式
- HBase二級索引方案總結索引
- 類載入機制總結
- Spring SPI 機制總結Spring
- slab機制總結篇
- Javascript繼承機制總結JavaScript繼承
- 二級指標與ARC不為人知的特性指標
- CSS設定滑鼠指標形狀CSS指標
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- mysql 二進位制日誌總結MySql
- C語言指標總結大學霸IT達人C語言指標
- Java類載入機制總結Java
- PHP 的錯誤機制總結PHP
- PHP的錯誤機制總結PHP
- Qt原始碼解析之-從PIMPL機制到d指標QT原始碼指標
- 【執行機制】 JavaScript的事件迴圈機制總結 eventLoopJavaScript事件OOP
- 計算機圖形學課程總結計算機
- C++中const與指標、引用的總結C++指標
- MyBatis快取機制(一級快取,二級快取)MyBatis快取