freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

symbian系統(tǒng)開發(fā)教程2(編輯修改稿)

2025-07-23 00:03 本頁面
 

【文章內(nèi)容簡介】 字符串或二進(jìn)制數(shù)據(jù)。TDesC 和TDes所提供的所有的操作都適用于TPtr。這個(gè)類定義了一些構(gòu)造方法,使得它能從指向內(nèi)存的指針構(gòu)造,并設(shè)置適當(dāng)?shù)拈L度值和最大長度值。編譯器也會產(chǎn)生隱式的構(gòu)造方法和拷貝構(gòu)造方法,因?yàn)樗鼈儧]有被聲明為保護(hù)的或私有的。一個(gè)TPtr對象可以從其它的可修改描述符構(gòu)造,例如:通過在不可修改的描述符上調(diào)用Des()方法,這個(gè)方法返回一個(gè)如下所示的TPtr對象:_LIT(KLiteralDes1, Jackdaws love my big sphinx of quartz)。TBufC60 buf(KLiteralDes1)。 // TBufC are described laterTPtr ptr(())。 // Copy construction。 can modify the data in bufTInt length = ()。 // Length = 37TInt maxLength = ()。 // Maximum length = 60, as for bufTUint8* memoryLocation。 // Valid pointer into memory...TInt len = 12。 // Length of data to be representedTInt maxLen = 32。 // Maximum length to be represented// Construct a pointer descriptor from a pointer into memoryTPtr8 memPtr(memoryLocation, maxLen)。 // length = 0, max length = 32TPtr8 memPtr2(memoryLocation, len, maxLen)。 // length = 12, max = 32另外,TPtr提供了賦值運(yùn)算符=(),用來拷貝數(shù)據(jù)到指針?biāo)赶虻膬?nèi)存(數(shù)據(jù)源可以是可修改、不可修改的指針描述符,或以0結(jié)尾的字符串)。如果要拷貝的數(shù)據(jù)的長度超過了描述符的最大長度,會引發(fā)一個(gè)系統(tǒng)異常。像TPtrC一樣,TPtr也定義了一個(gè)Set()方法,用來改變描述符所指向的數(shù)據(jù)。_LIT(KLiteralDes1, Jackdaws love my big sphinx of quartz)。TBufC60 buf(KLiteralDes1)。 // TBufC are described laterTPtr ptr(())。 // Points to the contents of bufTUint16* memoryLocation。 // Valid pointer into memory...TInt maxLen = 40。 // Maximum length to be representedTPtr memPtr(memoryLocation, maxLen)。 // length = 12, max length = 40// Copy and replacememPtr = ptr。 // memPtr data is KLiteralDes1 (37 bytes), maxLength = 40_LIT(KLiteralDes2, The quick brown fox jumps over the lazy dog)。TBufC100 buf2(KLiteralDes2)。 // TBufC are described laterTPtr ptr2(())。 // Points to the data in buf// Replace what ptr points to(ptr2)。 // ptr points to contents of buf2, max length = 100memPtr = ptr2。 // Attempt to update memPtr which panics because the// contents of ptr2 (43 bytes) exceeds max length of memPtr (40 bytes)您一定不要混淆了Set()方法和=()賦值操作。前者將描述符的指針重置,使它指向新的數(shù)據(jù)區(qū)域,而后者將數(shù)據(jù)拷貝到描述符中,一般來說,這會更改描述符的長度,但不會更改它的最大長度值。 基于棧(stackbased)的緩沖區(qū)描述符基于緩沖區(qū)的描述符也可以分為可修改的TBuf和不可修改TBufC的兩種類型。對這種描述符來講,字符串?dāng)?shù)據(jù)本身就是描述符的一部分。下圖給出了描述符的內(nèi)存布局:iLength 12iMaxLengthHello World!TBuf15iLength 12Hello World!TBufC12這兩種描述符通常用來存儲定長的或相對較小的字符串,常用來存放長度小于256個(gè)字符的文件名。類似于C語言中的char[],但是,它們具有檢查內(nèi)存溢出的功能。216。 TBufCnTBufCn是不可修改的緩沖區(qū)類型,它主要用來存放字符串常量或是二進(jìn)制數(shù)據(jù)。該類從TBufCBase類派生,尖括號內(nèi)的數(shù)字表示分配給該描述符的數(shù)據(jù)區(qū)的大小。它定義了一些構(gòu)造方法,允許從其它的描述符或以0結(jié)尾的字符串構(gòu)造。也允許創(chuàng)建一個(gè)空的描述符,然后再填充。由于該描述符的數(shù)據(jù)是不可修改的,它的整個(gè)內(nèi)容可以被置換(通過該類的所定義的賦值操作),用來置換的數(shù)據(jù)可以是其它的不可修改的描述符或是0結(jié)尾的字符串,但是,無論是何種情況,新數(shù)據(jù)的長度都不能超過長度n(也就是創(chuàng)建該類的時(shí)候指定的模板參數(shù))。_LIT(KPalindrome, Satan, oscillate my metallic sonatas)。TBufC50 buf1(KPalindrome)。 // Constructed from literal descriptorTBufC50 buf2(buf1)。 // Constructed from buf1// Constructed from a NULLterminated C stringTBufC30 buf3((TText*)Never odd or even)。TBufC50 buf4。 // Constructed empty, length = 0// Copy and replacebuf4 = buf1。 // buf4 contains data copied from buf1, length modifiedbuf1 = buf3。 // buf1 contains data copied from buf3, length modifiedbuf3 = buf2。 // Panic! Max length of buf3 is insufficient for buf2 data該描述符中的數(shù)據(jù)可以被整體置換,但不能被直接修改,但有時(shí)候我們的確需要修改緩存區(qū)中的數(shù)據(jù),該怎么辦呢?系統(tǒng)提供了另一種途徑來修改數(shù)據(jù)。該類定義了Des()方法,它為緩存區(qū)中的數(shù)據(jù)返回一個(gè)可修改的指針描述符(TPtr)。我們可以通過這個(gè)指針描述符間接地修改緩沖區(qū)中的數(shù)據(jù)。當(dāng)數(shù)據(jù)通過指針描述符被修改以后,指針描述符和緩沖區(qū)描述符中的iLength的值會跟著改變,但要記住,緩存區(qū)描述符的長度值只可能減小,而是不可能增大的,因?yàn)椋枋龇愂遣惶峁﹥?nèi)存管理管理功能的。_LIT8(KPalindrome, Satan, oscillate my metallic sonatas)。TBufC840 buf(KPalindrome)。 // Constructed from literal descriptorTPtr8 ptr(())。 // data is the string in buf, max length = 40// Illustrates the use of ptr to copy and replace contents of bufptr = (TText8*)Do Geese see God?。ASSERT(()==())。_LIT8(KPalindrome2, Are we not drawn onward, we few, drawn onward tonew era?)。ptr = KPalindrome2。 // Panic! KPalindrome2 exceeds max length of ptr(=40)216。 TBufn這也是一個(gè)模板類,它是一個(gè)可修改的緩沖區(qū)描述符類,后面的n表示緩沖區(qū)大小。TBuf從TBufBase類派生,而TBufBase是從TDes派生的,因此,它繼承了TDes和TDesC類所有的方法。像TBufCn一樣,TBufn也定義了一系列的構(gòu)造方法和賦值操作。對所有的描述符類型來講,內(nèi)存管理是您的責(zé)任,盡管這個(gè)緩沖區(qū)中的數(shù)據(jù)是可修改的,但它的長度不能超過在構(gòu)造方法中所給定的最大值(n)。假如緩沖區(qū)的內(nèi)容需要擴(kuò)展,那么您必須決定是在編譯的時(shí)候就給定一個(gè)足夠大的值,或是在運(yùn)行的時(shí)候動態(tài)分配內(nèi)存。但無論哪種情況,都要確保數(shù)據(jù)長度不要超過緩存區(qū)的最大長度。如果需要使用動態(tài)分配的內(nèi)存,您可以使用基于堆的描述符,這個(gè)我們在后面要講到。要是您覺得管理內(nèi)存分配的任務(wù)太過繁重,您也可以選擇使用動態(tài)數(shù)組。不過,您應(yīng)當(dāng)記住,使用動態(tài)數(shù)組的額外開銷是很高的。_LIT(KPalindrome, Satan, oscillate my metallic sonatas)。TBuf40 buf1(KPalindrome)。 // Constructed from literal descriptorTBuf40 buf2(buf1)。 // Constructed from constant buffer descriptorTBuf840 buf3((TText8*)Do Geese see God?)。 // from C stringTBuf40 buf4。 // Constructed empty, length = 0, maximum length = 40// Illustrate copy and replacebuf4 = buf2。 // buf2 copied into buf4, updating length and max lengthbuf3 = (TText8*)Murder for a jar of red rum。 // updated from C string 基于堆的(HeapBased)緩沖區(qū)描述符當(dāng)您要使用非常長的字符串時(shí),有另外一種選擇:基于堆的描述符。它能擁有比它的創(chuàng)建者更長的生存期。當(dāng)您在編譯的時(shí)候還不能確定緩沖區(qū)長度的時(shí)候,堆描述符也是很有用的,這時(shí),它的作用相當(dāng)于C語言中的malloc。216。 HBufC也許您已經(jīng)發(fā)現(xiàn),HBufC的類名以“H”開頭,這不符合Symbian系統(tǒng)中慣用的命名習(xí)慣。這的確是一個(gè)特例,“H”表示這個(gè)類一般是在堆(Heap)上分配的。HBufC定義了靜態(tài)的NewL()方法,用來在堆上創(chuàng)建一個(gè)緩存區(qū)。正如您所見到,HBufC中的字母“C”表示這個(gè)表述符是不可修改的。對該類的操作幾乎和TBufCn一樣:該類提供了一套賦值操作,允許整個(gè)緩沖區(qū)中的內(nèi)容被替換掉;同樣,新內(nèi)容的長度不能超過緩存區(qū)的大小,否則會引起系統(tǒng)異常;通過調(diào)用Des()方法,可以返回一個(gè)可修改的指針描述符(TPtr),可以通過這個(gè)指針描述符來更改緩沖區(qū)中的內(nèi)容。_LIT(KPalindrome, Do Geese see God?)。TBufC20 stackBuf(KPalindrome)。// Allocates an empty heap descriptor of max length 20HBufC* heapBuf = HBufC::NewLC(20)。TInt length = heapBufLength()。// C
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1