征服c指針_紅黑聯(lián)盟讀書頻道
本文關鍵詞:深入理解C指針,由筆耕文化傳播整理發(fā)布。
> c語言 > 深入理解C指針 1. 理解size_t 2014-02-19 11:37:03 我要投稿
本文所屬圖書 > 深入理解C指針
指針是C 語言的一項核心特性,對于指針的掌握程度是區(qū)分C 語言新手與老手的重要標志。本書專門研究指針,旨在提供比其他圖書更全面和深入的C 指針和內存管理知識。全書巨細靡遺地為讀者展現(xiàn)了C 語言編程中最 立即去當當網訂購
size_t 類型表示C 中任何對象所能達到的最大長度。它是無符號整數(shù),因為負數(shù)在這里沒有意義。它的目的是提供一種可移植的方法來聲明與系統(tǒng)中可尋址的內存區(qū)域一致的長度。size_t 用做sizeof 操作符的返回值類型,同時也是很多函數(shù)的參數(shù)類型,包括malloc 和strlen。
在聲明諸如字符數(shù)或者數(shù)組索引這樣的長度變量時用size_t 是好的做法。它經常用于循環(huán)計數(shù)器、數(shù)組索引,,有時候還用在指針算術運算上。
size_t 的聲明是實現(xiàn)相關的。它出現(xiàn)在一個或多個標準頭文件中,比如stdio.h 和stblib.h,典型的定義如下:
#ifndef __SIZE_T
#define __SIZE_T
typedef unsigned int size_t;
#endif
define 指令確保它只被定義一次。實際的長度取決于實現(xiàn)。通常在32 位系統(tǒng)上它的長度是32 位,而在64 位系統(tǒng)上則是64 位。一般來說,size_t 可能的最大值是SIZE_MAX。
通常size_t 可以用來存放指針,但是假定size_t 和指針一樣長不是個好主意。稍后的“使用sizeof 操作符和指針”會講到,intptr_t 是更好的選擇。
打印size_t 類型的值時要小心。這是無符號值,如果選錯格式說明符,可能會得到不可靠的結果。推薦的格式說明符是%zu。不過,某些情況下不能用這個說明符, 作為替代,可以考慮%u 或%lu。
下面這個例子將一個變量定義為size_t,然后用兩種不同的格式說明符來打。
size_t sizet = -5;
printf("%d\n",sizet);
printf("%zu\n",sizet);
因為size_t 本來是用于表示正整數(shù)的,如果用來表示負數(shù)就會出問題。如果為其賦一個負數(shù),然后用%d 和%zu 格式說明符打印,就得到如下結果:
-5
4294967291
%d 把size_t 當做有符號整數(shù),它打印出-5 因為變量中存放的就是-5。%zu 把size_t 當做無符號整數(shù)。當-5 被解析為有符號數(shù)時,高位置為1,表示這個數(shù)是負數(shù)。當它被解析為無符號數(shù)時,高位的1 被當做2 的乘冪。所以在用%zu 格式說明符時才會看到那個大整數(shù)。
正數(shù)會正常顯示,如下所示:
sizet = 5;
printf("%d\n",sizet); // 顯示5
printf("%zu\n",sizet); // 顯示5
因為size_t 是無符號的,一定要給這種類型的變量賦正數(shù)。
點擊復制鏈接 與好友分享!回本站首頁 您對本文章有什么意見或著疑問嗎?請到論壇討論您的關注和建議是我們前行的參考和動力 上一篇:1.2.2 指針相關的預定義類型 下一篇:2. 對指針使用sizeof操作符 相關文章1.1.1 共享內存多核系統(tǒng)與分布式內
1.1.2 并行程序設計和多核程序設計
1.3 理解Amdahl法則
1.4 考慮Gustafson法則
1.6.1 以并發(fā)的思想指導設計
1.1 開 發(fā) 背 景
1.2.1 需求分析
1.2.2 可行性分析
1.2.3 編寫項目計劃書
1.3.1 系統(tǒng)目標
圖文推薦本文關鍵詞:深入理解C指針,由筆耕文化傳播整理發(fā)布。
本文編號:156429
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/156429.html