欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    【教学课件】第3章指标与字串(PointersandStrings).ppt

    • 资源ID:5658574       资源大小:485.50KB        全文页数:36页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第3章指标与字串(PointersandStrings).ppt

    第3章 指標與字串(Pointers and Strings),3-1 C語言的指標3-2 指標與陣列3-3 指標與結構3-4 指標與字串3-5 指標的應用-字串處理,3-1 C語言的指標,3-1-1 指標變數的使用3-1-2 指向指標的指標變數,3-1 C語言的指標,C語言的指標(Points)屬於一種低階的程式處理功能,可以直接存取記憶體位址,指標變數的變數內容並不是字元或數值等基本資料型態的值,而是其它變數的位址(Address)。換句話說,單獨存在的指標變數並沒有意義,因為它的值是其它變數的位址,程式需先宣告其它變數,才能取得指標變數的值,即指向其它變數的儲存位址。,3-1-1 指標變數的使用-說明,C語言的指標變數(Pointer Variables)是一種變數,其變數值是其它變數的位址(Address),如下圖所示:,3-1-1 指標變數的使用-宣告,指標變數的宣告和基本資料型態變數的宣告稍有不同,其宣告格式,如下所示:資料型態*變數名稱;指標變數宣告和變數宣告只差變數名稱前的*星號,簡單的說,這個變數是指向宣告資料型態的指標變數,例如:指向整數int的指標變數宣告,如下所示:int*ptr;,3-1-1 指標變數的使用-取得變數位址,將指標變數ptr指向變數j的位址,取得變數位址是使用單運算元的,3-1-1 指標變數的使用-初值,指標變數也可以在宣告時指定初值,不過取得位址的變數一定需要在指標變數前宣告,如下所示:int i;int*ptr1=,3-1-1 指標變數的使用-取得變數值,在C程式取得指標變數指向的變數值是使用單運算元的*星號運算子,稱為取值(Indirection)或解參考(Dereferencing)運算子,例如:ptr是指向整數變數j的指標變數,*ptr就是變數j的值,如下所示:printf(*ptr:位址%p的值=%dn,ptr,*ptr);上述printf()函數使用%p格式字元顯示指標變數的值,ptr是變數j的位址,*ptr是變數j的值。,3-1-2 指向指標的指標變數-說明,指向指標的指標變數是說指標變數是指向其它的指標變數。首先在程式宣告一個整數和指標變數,如下所示:int i=5;int*ptr=指標變數ptr2共有3個星號,第1個星號指出變數是指標變數,後2個星號表示它是指向指標的指標變數,即ptr1。,3-1-2 指向指標的指標變數-圖例,3-2 指標與陣列,3-2-1 指標與陣列3-2-2 指標與二維陣列3-2-3 指標陣列,3-2-1 指標與陣列-說明,C語言的陣列配置的是一塊連續的記憶體空間,然後使用索引值存取陣列元素,如果改成指標變數,只需將指標變數指向陣列的第1個元素,元素存取就可以使用指標的數運算加和減來完成。,3-2-1 指標與陣列-指向陣列元素,宣告指標變數指向陣列的第1個元素,如下所示:int*ptr=array;C語言的陣列名稱就是陣列第1個元素的位址,因為陣列名稱本身是一個指標變數,如果使用取址運算子,3-2-1 指標與陣列-走訪陣列(方法1),一共有2種方法存取其它陣列元素的值,如下所示:for(i=0;i LEN;i+)printf(ptr+%d=%d,i,*(ptr+i);,3-2-1 指標與陣列-走訪陣列(方法2),第2個方法是使用指標變數的遞增運算ptr+,如下所示:for(i=0;i LEN;i+)printf(ptr+%d=%d,i,*ptr+);上述for迴圈使用指標走訪陣列元素,指標運算ptr+移到下一個元素,元素值是取值運算*(ptr+),這個方法會真正移動指標變數的位址,等到執行完迴圈,指標變數ptr是指向陣列的最後1個元素。,3-2-2 指標與二維陣列-範例,C語言的二維陣列也可以使用指標變數來存取陣列元素,例如:宣告一個二維整數陣列tables,如下所示:#define ROWS 4#define COLS 5int tablesROWSCOLS;,3-2-2 指標與二維陣列-方法1,視為一維陣列存取,因為二維陣列配置的記憶體空間是將每一列結合起來的連續記憶體位置,如同4列合一的一維陣列,如下所示:int*ptr;ptr=,3-2-2 指標與二維陣列-方法2,第二個方法是使用tables陣列名稱的指標變數,其運算式如下所示:*(*(tables+i)+j)tables是二維陣列的名稱,可以將它視為是一個指向指標的指標變數,在中間括號部分的運算式,如下所示:*(tables+i)上述指標運算可以當作是第一欄tablesROWS0的指標運算,取值運算取得的是:tables00(tables+0)tables10(tables+1)tables20(tables+2)tables30(tables+3),3-2-3 指標陣列-宣告,指標陣列(Arrays of Pointer)是指陣列的每一個元素都是一個指標變數,也就是說,陣列元素的值都是指向其它變數的位址。指標陣列的宣告方式類似指標變數,如下所示:#define ROWS 4int*tablesROWS;上述程式碼宣告指標陣列tables,一共擁有4個元素,每一個元素是一個整數的指標變數,可以指向整數或一個一維陣列,如果都是指向5個元素的一維陣列,相當於是宣告一個4 X 5的二維陣列。,3-2-3 指標陣列-差異,指標陣列和二維陣列的差異在指標陣列並不能指定初值,二維陣列在宣告後就配置ROWS X COLS個元素,指標陣列只配置ROWS個元素,指標陣列的最大好處是每一個指標指向的變數可以是不同長度,例如:不同元素分別指向整數或整數陣列。,3-2-3 指標陣列-圖例,3-2-3 指標陣列-存取,使用指標運算存取指標陣列的元素,如下所示:for(i=0;i ROWS;i+)printf(*tables%d=%2d,i,*tablesi);printf(*(tables+%d)=%2d,i,*(tables+i);printf(*(ptr+%d)=%2d,i,*(ptr+i);上述for迴圈可以走訪指標陣列,然後使用*tablesi、*(tables+i)和*(ptr+i)取得陣列元素的值。,3-3 指標與結構-宣告,指標也可以指向結構。例如:宣告lable結構儲存員工的姓名和年齡,如下所示:struct label char name20;int age;上述結構擁有2個成員變數,因為指標需要指向結構變數的位址,所以需要先宣告結構變數,然後才能建立指向結構的指標,如下所示:struct label worker;struct label*ptr;,3-3 指標與結構-存取,接著將結構指標指向結構,如下所示:ptr=,3-4 指標與字串,3-4-1 指標與字串3-4-2 字串的指標陣列,3-4 指標與字串,在C語言的字串是一種字元陣列,指標運算也一樣適用在字元陣列的字串。例如:宣告一個字元陣列來儲存字串,其宣告如下所示:char line80;存取字元陣列元素是使用line0、line1line79來存取,如下所示:linei=c;在字元陣列的結束加上字元0當作結束字元,如下所示:linei=0;,3-4-1 指標與字串,字串指標是一個char資料型態的指標,可以用來指向字元陣列或字串常數。宣告一個字元陣列的字串,如下所示:#define LEN 16char strLEN=This is a book.;上述字元陣列是一個字串且指定初值,接著宣告指標變數指向此字串,如下所示:char*ptr=str;,3-4-2 字串的指標陣列-說明,C語言的指標陣列最常是應用在字串的指標陣列,如下所示:#define ROWS 4char*nameROWS=陳會安,江小魚,張無忌,楊過;,3-4-2 字串的指標陣列-字串交換,使用指標陣列來儲存字串,不只可以節省記憶空間,而且因為是指標,如果指標陣列的元素需要交換字串,只需更改指標指向的字串即可,如下圖所示:,3-5 指標的應用-字串處理(說明),C語言的字串並不是一種基本資料型態,而是一種字元陣列,所以並沒有支援指定、連結和比較等運算子,取而代之的是在標準函式庫提供多種字串處理函數。在這一節筆者準備討論一些基本字串函數的實作,著重於說明如何設計這些字串函數所需的程式技巧,這些技巧都屬於指標的應用。,3-5 指標的應用-字串處理(標頭檔),01:/*程式範例:Ch3-5.h*/02:char str81;/*儲存字串的字元陣列*/03:/*抽象資料型態的操作函數宣告*/04:extern int strLen(char*str);05:extern char*strCpy(char*dest,char*source);06:extern char*strCat(char*dest,char*source);07:extern int strCmp(char*source,char*target);08:extern char*strPos(char*source,char*target);,3-5 指標的應用-字串處理(1),函數strLen():取得字串長度字串是一個字元陣列,計算字串長度的方法就是一維陣列的走訪和指標的遞增運算,如下所示:char*ptr=str;while(*ptr!=0)ptr+;return ptr-str;上述程式碼使用while迴圈走訪到字串的最後1個字元,然後使用ptr-str指標減法運算取得字串長度。,3-5 指標的應用-字串處理(2),函數strCpy():字串複製字串複製是將字串內容複製到其它的字元陣列,其目的是為了保留原始字串,以避免執行其它字串處理時,更改到原始字串的內容。如下所示:char*ptr=dest;while(*ptr+=*source+)!=0);return dest;上述程式碼使用while迴圈複製字串,因為先執行*ptr+=*source+指定運算,再進行比較,所以連原始字串的結束字元也會複製到新字串。,3-5 指標的應用-字串處理(3),函數strCat():字串連結字串連結是將兩個字串結合成一個字串,也就是從第1個字串的最後開始複製第2個字串。字串連結函數是結合字串長度和複製函數,如下所示:while(*ptr+!=0);ptr-;上述程式碼使用while迴圈走訪到字串的最後1個的結束字元,然後就使用迴圈複製字串,如下所示:while(*ptr+=*source+)!=0);,3-5 指標的應用-字串處理(4),函數strCmp():字串比較字串比較是比較兩個字串的內容,如果兩個字串完全相同的話,就傳回0,如果不相同,使用ASCII的字元碼比較不同的哪一個字元。函數是使用迴圈從頭開始比較兩個字串中的每一個字元,如下所示:for(;*source=*target;source+,target+)if(*source=0)return 0;如果不相等,接著比較最後不相等的兩個字元來決定字串大小,如下所示:if(*source-*target)0)return-1;else return 1;,3-5 指標的應用-字串處理(5),函數strPos():子字串的搜尋子字串的搜尋是指在原始字串中找尋某特定字串是否存在,如果存在,這個特定字串就是原始字串的子字串。函數使用二層的巢狀迴圈來執行字串比較,如下所示:while(*s!=0)ptr=s;t=target;while(*t!=0,

    注意事项

    本文(【教学课件】第3章指标与字串(PointersandStrings).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开