深入理解C言指针的奥秘.docx

深入理解C言指针的奥秘.docx

ID:58416700

大小:75.08 KB

页数:27页

时间:2020-05-11

深入理解C言指针的奥秘.docx_第1页
深入理解C言指针的奥秘.docx_第2页
深入理解C言指针的奥秘.docx_第3页
深入理解C言指针的奥秘.docx_第4页
深入理解C言指针的奥秘.docx_第5页
资源描述:

《深入理解C言指针的奥秘.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、讓你不再害怕指針前言:複雜類型說明要瞭解指針,多多少少會出現一些比較複雜的類型,所以我先介紹一下如何完全理解一個複雜類型,要理解複雜類型其實很簡單,一個類型裡會出現很多運算子,他們也像普通的運算式一樣,有優先級,其優先順序和運算優先順序一樣,所以我總結了一下其原則:從變數名處起,根據運算子優先順序結合,一步一步分析.下面讓我們先從簡單的類型開始慢慢分析吧:intp;這是一個普通的整型變數int*p;首先從P處開始,先與*結合,所以說明P是一個指標,然後再與int結合,說明指標所指向//的內容的類型為int型.所

2、以P是一個返回整//型數據的指標intp[3];//首先從P處開始,先與[]結合,說明P是一個數//組,然後與int結合,說明陣列裡的元素是整//型的,所以P是一個由整型資料組成的陣列int*p[3];//首先從P處開始,先與[]結合,因為其優先順序//比*高,所以P是一個陣列,然後再與*結合,說明//陣列裡的元素是指標類型,然後再與int結合,//說明指標所指向的內容的類型是整型的,所以//P是一個由返回整型資料的指標所組成的陣列int(*p)[3];//首先從P處開始,先與*結合,說明P是一個指標//然後再

3、與[]結合(與"()"這步可以忽略,只是為//了改變優先順序),說明指標所指向的內容是一個//陣列,然後再與int結合,說明陣列裡的元素是//整型的.所以P是一個指向由整型資料組成的數//組的指針int**p;//首先從P開始,先與*結合,說是P是一個指標,然//後再與*結合,說明指標所指向的元素是指標,然//後再與int結合,說明該指標所指向的元素是整//型數據.由於二級指標以及更高級的指標極少用//在複雜的類型中,所以後面更複雜的類型我們就//不考慮多級指針了,最多只考慮一級指針.intp(int);//從

4、P處起,先與()結合,說明P是一個函數,然後進入//()裡分析,說明該函數有一個整型變數的參數//然後再與外面的int結合,說明函數的返回值是//一個整型資料Int(*p)(int);//從P處開始,先與指標結合,說明P是一個指標,然後與//()結合,說明指標指向的是一個函數,然後再與()裡的//int結合,說明函數有一個int型的參數,再與最外層的//int結合,說明函數的返回類型是整型,所以P是一個指//向有一個整型參數且返回類型為整型的函數的指標int*(*p(int))[3];//可以先跳過,不看這個類

5、型,過於複雜//從P開始,先與()結合,說明P是一個函數,然後進//入()裡面,與int結合,說明函數有一個整型變數//參數,然後再與外面的*結合,說明函數返回的是//一個指標,,然後到最外面一層,先與[]結合,說明//返回的指標指向的是一個陣列,然後再與*結合,說//明陣列裡的元素是指標,然後再與int結合,說明指//針指向的內容是整型資料.所以P是一個參數為一個//整數據且返回一個指向由整型指標變數組成的陣列//的指標變數的函數.說到這裡也就差不多了,我們的任務也就這麼多,理解了這幾個類型,其它的類型對我們

6、來說也是小菜了,不過我們一般不會用太複雜的類型,那樣會大大減小程式的可讀性,請慎用,這上面的幾種類型已經足夠我們用了.1、細說指針指標是一個特殊的變數,它裡面存儲的數值被解釋成為記憶體裡的一個位址。要搞清一個指標需要搞清指標的四方面的內容:指標的類型、指標所指向的類型、指標的值或者叫指標所指向的記憶體區、指標本身所佔據的記憶體區。讓我們分別說明。先聲明幾個指針放著做例子:例一:(1)int*ptr;(2)char*ptr;(3)int**ptr;(4)int(*ptr)[3];(5)int*(*ptr)[4];

7、1.指針的類型從語法的角度看,你只要把指針聲明語句裡的指標名字去掉,剩下的部分就是這個指標的類型。這是指標本身所具有的類型。讓我們看看例一中各個指標的類型:(1)int*ptr;指針的類型是int*(2)char*ptr;指針的類型是char*(3)int**ptr;指針的類型是int**(4)int(*ptr)[3];指針的類型是int(*)[3](5)int*(*ptr)[4];指針的類型是int*(*)[4]怎麼樣?找出指針的類型的方法是不是很簡單?2.指標所指向的類型當你通過指標來訪問指標所指向的記憶體

8、區時,指標所指向的類型決定了編譯器將把那片記憶體區裡的內容當做什麼來看待。從語法上看,你只須把指標聲明語句中的指標名字和名字左邊的指標聲明符*去掉,剩下的就是指標所指向的類型。例如:(1)int*ptr;//指標所指向的類型是int(2)char*ptr;//指標所指向的的類型是char(3)int**ptr;//指標所指向的的類型是int*(4)int(*ptr)[3];//指標所指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。