版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針指針v引用調用引用調用v數組與指針數組與指針v函數指針函數指針v基于指針的字符串基于指針的字符串v總結總結C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v我們首先的觀念就是簡單地把地址作為數我們首先的觀念就是簡單地把地址作為數據,可以把地址存儲在內存中。據,可以把地址存儲在內存中。int x; 1000 1000 2 2x = 2; 1004 1004 1020 1020 10001000由于地址作為數據對待,他們由于地址作為數據對待,他們也可以存儲在內存中。也可以存儲在內存中。C+大學教程 2007.9C大學
2、教程指針和基本指針的字符串課件v當一個變量存儲另一個變量的地址時,那我們說它當一個變量存儲另一個變量的地址時,那我們說它就是那個變量的指針。就是那個變量的指針。v在內存表中,我們經常用箭頭來表示指針,在內存表中,我們經常用箭頭來表示指針,x x的真的真實地址和我們實地址和我們理解的概念不理解的概念不相關。相關。v我們經常用任意我們經常用任意 地址描述指針,地址描述指針, 同時在以后經常同時在以后經常會放棄它。會放棄它。 int x; 1000 2 x = 2; 1004 1020 1000 我們把1000作為整數2的指針C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針就是把
3、地址作指針就是把地址作為數據,把地址存為數據,把地址存儲在內存中儲在內存中v指針變量指針變量:存儲地:存儲地址的變量址的變量v變量的指針變量的指針:當一:當一個變量存儲另一個個變量存儲另一個變量的地址時,那變量的地址時,那我們說它就是那個我們說它就是那個變量的指針變量的指針1000 21000如在某一程序如在某一程序中定義了中定義了int x;int x;X=2;X=2;如系統(tǒng)給如系統(tǒng)給x x分分配的空間是配的空間是10001000號單元,號單元,則指向則指向x x的指的指針是另一個變針是另一個變量,該變量中量,該變量中存放的數據為存放的數據為10001000C+大學教程 2007.9C大學教
4、程指針和基本指針的字符串課件v如何定義一個變量為指針變量?如何定義一個變量為指針變量? 類型標識符類型標識符 *指針變量指針變量; 如:如:int int *intp;intp; double double *doublep;doublep; char char * *chPtr;chPtr;多個指針變量需要分別加多個指針變量需要分別加* *: double double * *doublep,doublep,* *doubleq;doubleq;C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v回答這些問題可以使我們更好地理解指針回答這些問題可以使我們更好地理解指針。 int
5、x,*px; x = 2; 1000 x 2 1004 問題:問題:1、如何把如何把x x的地址置入的地址置入pxpx中?中?2、如何用如何用pxpx處理和改變處理和改變x x? 1020 pxC+大學教程 2007.9C大學教程指針和基本指針的字符串課件v我們不能用簡單的常數作為地址對指針進行賦我們不能用簡單的常數作為地址對指針進行賦值。我們永遠不知道當我們編寫程序時,變量值。我們永遠不知道當我們編寫程序時,變量地址的值將是什么?地址的值將是什么? int x,*px; 1000 x = 2; 2 1004 問題:問題:1 1、如何把、如何把x x的地址置入的地址置入pxpx中?中?我們不能
6、用這樣表示:我們不能用這樣表示: 1020 pxpxpx=1000; ; C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v如何把某一變量的地址置入一個指針變如何把某一變量的地址置入一個指針變量中?量中?用地址運算符用地址運算符 “&” ” 解決。解決。如表達式如表達式 “&x” ” 返回的是變量返回的是變量 x 的地址。如:的地址。如:intp = &x; ;& 運算符后面不能跟常量或表達式。如運算符后面不能跟常量或表達式。如 &2 是沒有意義的,是沒有意義的,&(m * n + p )。也是沒。也是沒有意義的有意義的C+大學教程 2007.9C大學教程指針和基本指針的字符串課
7、件v提供運算符返回操作數的地址,我們用提供運算符返回操作數的地址,我們用& &來來表示。表示。 int x,*px; 1000 x = 2; 2 1004 我們想要做的:px = x的地址 1020我們應該表示為: pxpx = &xC+大學教程 2007.9C大學教程指針和基本指針的字符串課件v使用變量的指針就是為了用這個指針得到使用變量的指針就是為了用這個指針得到變量的值并改變它。變量的值并改變它。int x,*px; 1000 2x = 2; 1004 px = &x;2、我們怎樣用px得到x的值并改變它? 1020 pxC+大學教程 2007.9C大學教程指針和基本指針的字符串課件v如
8、何用指針變量處理和改變它所指向的單如何用指針變量處理和改變它所指向的單元的值?元的值?用引用運算符用引用運算符 “*” ” 解決解決。如。如 *intp 表示的表示的是是 intp 指向的這個單元的內容。指向的這個單元的內容。在對在對 intp 使用引用運算之前,必須先對使用引用運算之前,必須先對 intp 賦值賦值C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v在定義中,在定義中,* *號是語法標記同時和類型結合在一起產生一號是語法標記同時和類型結合在一起產生一個指針定義。個指針定義。v在運算時,我們采用在運算時,我們采用* *號運算符,就象指針定義一樣。號運算符,就象指針定
9、義一樣。 但是但是* *號是獨立號是獨立 運算符,并和運算符,并和 指針一起表示指針一起表示 一個數值。一個數值。int x,*px,y; 1000 x 2x = 2; 1004px = &x;y 2我們想得到:我們想得到:y=pxy=px指向的值指向的值; ; 1020 px我們表示為:我們表示為:y=y=* *px;px;C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v我們可以認為一個指針是另一個變量的參考,當我們可以認為一個指針是另一個變量的參考,當我們處理這個變量時,我們叫這個運算符為我們處理這個變量時,我們叫這個運算符為“參參考運算符考運算符”,這個操作為,這個操作為
10、“參考指針參考指針”int x,*px,y; 1000 x 2x = 2; 1004 2px = &x;yy=*px; 1020 px*為引用運算符C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v為什么指針要指向一定類型的數據?為什么指針要指向一定類型的數據? 地址對于編譯器來說不足以解析地址的數據類型。地址對于編譯器來說不足以解析地址的數據類型。v由于指針的基本數據類型可以對指針表達式進行錯由于指針的基本數據類型可以對指針表達式進行錯誤檢查,誤檢查,v比如,分配一比如,分配一個整型數據指個整型數據指針,或者反之針,或者反之將產生一個警將產生一個警告。告。int x,*px,y
11、; 1000 x 2x = 2; 1004 px = &x;y 2y=*px; 1020指針必須要有一個明確的數據類型 px 1000以便編譯器可以解析數據的指向類型C+大學教程 2007.9C大學教程指針和基本指針的字符串課件如有:如有:int X, *intp, Y;X=3;Y=4;intp=&X;1000intp10044Y10003X如執(zhí)行:如執(zhí)行:*intp=Y+4;1000intp10044Y10008X注意:不能用注意:不能用intp=100;intp=100;因為我們永遠不知道變量存儲的真實地址,而且程序每因為我們永遠不知道變量存儲的真實地址,而且程序每次運行可能都不同。運行次
12、運行可能都不同。運行Fig.8.4 Fig.8.4 觀察觀察aPtraPtr值的變化值的變化C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針變量可以指向不同的變量。如指針變量可以指向不同的變量。如上例中上例中intp指指向向x,我們可以通過對,我們可以通過對intp的重新賦值改變指針的的重新賦值改變指針的指向。如果想讓指向。如果想讓intp指向指向y,只要執(zhí)行,只要執(zhí)行intp=&y就就可以了。這時,可以了。這時,intp與與x無任何關系。無任何關系。v同類的指針變量之間可相互賦值,表示同類的指針變量之間可相互賦值,表示二個指針二個指針指向同一內存空間。指向同一內存空間。v
13、空指針空指針指針沒有指向任何空間指針沒有指向任何空間空指針用常量空指針用常量NULLNULL表示,表示,NULLNULL的值一般賦為的值一般賦為0 0不能引用空指針指向的值不能引用空指針指向的值C+大學教程 2007.9C大學教程指針和基本指針的字符串課件設有定義設有定義 int x, y; int *p1,*p2;1000 x1004y1008p11012p2執(zhí)行語句:執(zhí)行語句:x=23;y=234;1000 23x1004 234y1008p11012p2執(zhí)行語句:執(zhí)行語句:p1=&x;p2=&y;1000 23x1004 234y1008 1000p11012 1004p2執(zhí)行語句:執(zhí)行
14、語句:*p1=34;*p2=17;1000 34x1004 17y1008 1000p11012 1004p2C+大學教程 2007.9C大學教程指針和基本指針的字符串課件有以下結構有以下結構 Ap1aBp2b比較執(zhí)行比較執(zhí)行 p1=p2和和 *p1= *p2后的不同結果。后的不同結果。 解:解: Ap1aBp2bBp1aBp2bC+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針在使用前必須初始化。指針在使用前必須初始化。v僅和別的變量一樣定義指針,不初始化是一僅和別的變量一樣定義指針,不初始化是一個比較普遍的錯誤。個比較普遍的錯誤。v沒有初始化的指針可能指向任意地址,對這沒
15、有初始化的指針可能指向任意地址,對這些指針作操作可能會導致程序錯誤。些指針作操作可能會導致程序錯誤。vNULLNULL是一個特殊指針值,稱為空指針。它的是一個特殊指針值,稱為空指針。它的值為值為0 0。它可被用來初始化一個指針,表示不。它可被用來初始化一個指針,表示不指向任何地址。指向任何地址。C+大學教程 2007.9C大學教程指針和基本指針的字符串課件vvoid指針:統(tǒng)配指針類型指針:統(tǒng)配指針類型v定義:定義:void *指針變量名;指針變量名;v作用:在標準作用:在標準C中,只有類型相同的指中,只有類型相同的指針之間能互相賦值,但任何類型的指針針之間能互相賦值,但任何類型的指針都能與統(tǒng)配
16、指針互相賦值。主要用于動都能與統(tǒng)配指針互相賦值。主要用于動態(tài)內存分配。態(tài)內存分配。C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針指針v引用調用引用調用v數組與指針數組與指針v函數指針函數指針v基于指針的字符串基于指針的字符串v總結總結C+大學教程 2007.9C大學教程指針和基本指針的字符串課件vC+有三種傳遞參數到函數的有三種傳遞參數到函數的方法方法: 按值傳遞按值傳遞, 用引用參數按引用傳遞用引用參數按引用傳遞 用指針參數按引用傳遞用指針參數按引用傳遞v按值傳遞按值傳遞: 在函數內部對形式在函數內部對形式參數的任何改變都不會影響實參數的任何改變都不會影響實際參數的值。
17、際參數的值。void swap(int a, int b) int c; c=a; a=b; b=c; 如果調用如果調用swap(x, y);并不能真正交換并不能真正交換x和和y的值!的值!C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v但在某些應用中確實需要改變實際參數但在某些應用中確實需要改變實際參數的值。例如,我們經常需要修改兩個變的值。例如,我們經常需要修改兩個變量的值,希望有個函數可以實現此功能。量的值,希望有個函數可以實現此功能。要解決此問題可以采用指針作為參數。要解決此問題可以采用指針作為參數。C+大學教程 2007.9C大學教程指針和基本指針的字符串課件void
18、 swap(int *a, int *b) int c; c=*a; *a= *b; *b=c; swap(&x, &y) 3 4xyab用指針作為參數可以在函數中修改主調程序的用指針作為參數可以在函數中修改主調程序的變量值,即實現變量傳遞。但必須小心使變量值,即實現變量傳遞。但必須小心使用!用!調用:調用:C+大學教程 2007.9C大學教程指針和基本指針的字符串課件void swap(int *a, int *b) int c, d; c=*a; *a= *b; *b=c; a=&c; b=&d swap(&x, &y) 3 4xyabcd這里這里, 通過傳指針仍然交換了通過傳指針仍然交換
19、了x, y的值的值,交換后交換后a, b又分別獲得了局部變量又分別獲得了局部變量c, d的地址的地址. 所以函數所以函數本質上還是傳值本質上還是傳值, 是將地址值傳給了是將地址值傳給了a, b變量變量.調用:調用:C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v把函數參數聲明為指針把函數參數聲明為指針v在函數體內使用間接訪問指針在函數體內使用間接訪問指針v當調用函數時,把地址作為參數傳遞當調用函數時,把地址作為參數傳遞C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v目前為止我們了解到的函數只能有一個返回值,目前為止我們了解到的函數只能有一個返回值,由由retur
20、n 語句返回。語句返回。v一個一元二次方程有二個解,如何讓此函數返一個一元二次方程有二個解,如何讓此函數返回二個解。答案是采用指針作為函數的參數?;囟€解。答案是采用指針作為函數的參數。v函數原型可設計為:函數原型可設計為: int SolveQuadratic(double a, double b, double c, double *px1, double *px2)v函數的調用函數的調用 SolveQuadratic(1.3, 4.5, 2.1, &x1, &x2) SolveQuadratic(a, b, c, &x1, &x2)C+大學教程 2007.9C大學教程指針和基本指針的字符
21、串課件int SolveQuadratic(double a,double b,double c,int SolveQuadratic(double a,double b,double c, double double * *px1,double px1,double * *px2px2) ) double disc, sqrtDisc; double disc, sqrtDisc; if(a = 0) return 1; if(a = 0) return 1; disc = b disc = b * * b 4 b 4 * * a a * * c; c; if(disc0) return 1
22、; if(disc0) return 1; sqrtDisc = sqrt(disc); sqrtDisc = sqrt(disc); * *px1px1 = (-b + sqrtDisc) / (2 = (-b + sqrtDisc) / (2 * * a); a); * *px2px2 = (-b - sqrtDisc) / (2 = (-b - sqrtDisc) / (2 * * a); a); return 0; return 0; C+大學教程 2007.9C大學教程指針和基本指針的字符串課件int main(void) double a, b, c, x1, x2; int re
23、sult; cout“input a, b, c:n”; cinabc; result = SolveQuadratic(a, b, c, &x1, &x2); if (result) cout“error”; else cout“x1=“x1x2=“x2;C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針是如此的奇妙指針是如此的奇妙, 通過傳遞指針值通過傳遞指針值, 函函數獲得了對外界變量空間的訪問權限數獲得了對外界變量空間的訪問權限, 尤其為其創(chuàng)造了修改空間中數據的機會尤其為其創(chuàng)造了修改空間中數據的機會.v如何通過指針只能做讀取如何通過指針只能做讀取, 而不能寫入而不能寫
24、入?用用const修飾修飾v加加const的時機的時機: 遵循最小特權原則遵循最小特權原則, 對于對于函數的參數函數的參數, 在能滿足函數處理數據的在能滿足函數處理數據的要求的前提下要求的前提下, 給予它最小的權限給予它最小的權限C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指向非常量的非常量指針指向非常量的非常量指針 調用調用: int x; f(&x) void f(int *ptr) 可以通過引用改變可以通過引用改變x的值的值; /*ptr=3; 可以改變可以改變ptr本身的值本身的值; / ptr+; ; 此時此時, x是變量是變量, ptr也是變量也是變量C+大學教
25、程 2007.9C大學教程指針和基本指針的字符串課件v指向常量數據的非常量指針指向常量數據的非常量指針 調用調用: int x; f(&x) void f(const int *ptr) 不可以通過引用改變不可以通過引用改變x的值的值; /*ptr=3; 可以改變可以改變ptr本身的值本身的值; / ptr+; ; 此時此時, x是變量是變量, ptr也是變量也是變量, 但不可以通過對但不可以通過對ptr的引用運算而修改的引用運算而修改x的值的值C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指向非常量的常量指針指向非常量的常量指針 調用調用: int x; f(&x) voi
26、d f( int * const ptr ) 可以通過引用改變可以通過引用改變x的值的值; /*ptr=3; 不可以改變不可以改變ptr本身的值本身的值; / ptr+; ; 此時此時, ptr是常量是常量, x的值也不可以通過的值也不可以通過ptr的引的引用方式來改動用方式來改動 C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指向常量的常量指針指向常量的常量指針 調用調用: int x; f(&x) void f( const int * const ptr ) 不可以通過引用改變不可以通過引用改變x的值的值; /*ptr=3; 不可以改變不可以改變ptr本身的值本身的值;
27、 / ptr+; ; 此時此時, ptr是變量是變量, ptr所指的空間中的值也不能所指的空間中的值也不能通過它來改變通過它來改變C+大學教程 2007.9C大學教程指針和基本指針的字符串課件sizeof(sizeof(類型名類型名) ) 返回該數據類型單個元素所占的字節(jié)數返回該數據類型單個元素所占的字節(jié)數sizeof sizeof 數組名數組名 返回該數組所占的字節(jié)數返回該數組所占的字節(jié)數int array10;coutsizeof arrayendl; void f(int *p, int len) coutsizeof pendl;調用調用f(array, 10); 返回返回10*4 即
28、即 40輸出輸出4, 即一個指針變量占據的空間即一個指針變量占據的空間, 而非數組而非數組array占據的空間占據的空間C+大學教程 2007.9C大學教程指針和基本指針的字符串課件int x,y,*p;定義一個整型指針。如定義多個指針變量,定義一個整型指針。如定義多個指針變量,則在每個變量前都要加則在每個變量前都要加*p = &x;把變量的地址賦給指針把變量的地址賦給指針*p = 2;改變指針指向的地址的值改變指針指向的地址的值y = *p;指針指向的地址中的值賦給一個變量指針指向的地址中的值賦給一個變量Swap(&x,&y);傳遞地址參數傳遞地址參數void Swap(int *p1, i
29、nt *p2)定義指針作為形式參數定義指針作為形式參數C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針指針v引用調用引用調用v數組與指針數組與指針v函數指針函數指針v基于指針的字符串基于指針的字符串v總結總結C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v在在C+中中, 數組與指針是密切相關的數組與指針是密切相關的, 兩者幾乎兩者幾乎可以交換使用可以交換使用. 數組名代表數組的起始地址數組名代表數組的起始地址,因因此一個數組名就是一個常量指針此一個數組名就是一個常量指針.v數組與指針相同之處數組與指針相同之處 在訪問內存方面的操作方式幾乎相同在訪問內存方面的
30、操作方式幾乎相同v數組與指針不同之處數組與指針不同之處 1、系統(tǒng)內存空間分配不同、系統(tǒng)內存空間分配不同 2、數組名是常量指針,不能修改它的值。、數組名是常量指針,不能修改它的值。C+大學教程 2007.9C大學教程指針和基本指針的字符串課件const int N =5;int aN=1,2,3,4,5; 假設假設300是是a的基的基地址地址int *p; 12345ap+i 本質是本質是 p+4*i3、 *(a+2) ?2、+p; 1、p=a; p=300p=300+4*13C+大學教程 2007.9C大學教程指針和基本指針的字符串課件const int N =5;int aN, *p; 假設
31、假設300是是a的基地址的基地址如下操作是允許的:如下操作是允許的:p=&a0; 此時此時p=300等價于等價于 p=&a1; 此時此時p=304;p=a; p=a+1; C+大學教程 2007.9C大學教程指針和基本指針的字符串課件const int N =5;int aN, *p; 假設假設300是是a的基地址的基地址對數組求和的三種方式:對數組求和的三種方式:方法方法1: sum=0; for( p = a; p &aN; +p ) sum += p;方法方法2: sum=0; for( i = 0; i N; +i ) sum += *(a+i);方法方法3: p=a; sum=0;
32、for( i = 0; i N; +i ) sum += pi;C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v系統(tǒng)內存空間分配不同系統(tǒng)內存空間分配不同const int N =5;int aN, *p; 假設假設300是是a的基地址的基地址300304308312316a0a1a2a3a4apC+大學教程 2007.9C大學教程指針和基本指針的字符串課件const int N =5; int aN, *p; 假設假設300是是a的基地址的基地址以下操作是以下操作是不不允許的:允許的: a=p; a+; a+=3;a是常量指針,不能修改它的值。是常量指針,不能修改它的值。運行并
33、分析運行并分析Fig. 8.20, Fig.8.21C+大學教程 2007.9C大學教程指針和基本指針的字符串課件數組是同種數據類型數據的集合數組是同種數據類型數據的集合,該類型當然也該類型當然也可以是指針可以是指針.指針數組指針數組: 數組的每個元素都是指針數組的每個元素都是指針如如: char *a4; char ch1, ch2, ch3, ch4 a0=&ch1; a1=&ch2; a2=&che3; a3=&ch4;C+大學教程 2007.9C大學教程指針和基本指針的字符串課件 實際應用中實際應用中,常見的做法是字符串數組常見的做法是字符串數組: const char *suit4=
34、“Hearts”, “Diamonds”, “Clubs”, “Spades” 字符串數組中的每一項都是一個字符串字符串數組中的每一項都是一個字符串,實際實際指向相應字符串的第一個字符的指針指向相應字符串的第一個字符的指針(地址地址) C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v指針指針v引用調用引用調用v數組與指針數組與指針v函數指針函數指針v基于指針的字符串基于指針的字符串v總結總結C+大學教程 2007.9C大學教程指針和基本指針的字符串課件指向函數的指針指向函數的指針: 指針指向內存中函數代碼存放的起始地址指針指向內存中函數代碼存放的起始地址函數指針和其它指針一樣也
35、可以傳遞給函數、從函函數指針和其它指針一樣也可以傳遞給函數、從函數中返回、賦給其他的函數指針、存儲在數組中。數中返回、賦給其他的函數指針、存儲在數組中。函數指針的聲明函數指針的聲明: 如如 bool (*compare)(int, int) 類型名類型名(*指針變量名指針變量名)(形式參數列表形式參數列表)C+大學教程 2007.9C大學教程指針和基本指針的字符串課件通過函數指針調用函數通過函數指針調用函數: 如如 (*compare)(3+5, x) 其中其中x是是int類型類型 (*指針變量名指針變量名)(實際參數列表實際參數列表)函數指針常用在菜單驅動的系統(tǒng)中函數指針常用在菜單驅動的系統(tǒng)
36、中, 將不同的菜單功將不同的菜單功能設計成不同的函數來實現能設計成不同的函數來實現, 之后根據用戶輸入之后根據用戶輸入的不同通過函數指針調用不同的函數的不同通過函數指針調用不同的函數.C+大學教程 2007.9C大學教程指針和基本指針的字符串課件/ Fig. 8.29: fig08_29.cpp/ Demonstrating an array of pointers to functions.#include using std:cout;using std:cin;using std:endl;/ function prototypes - each function performs si
37、milar actionsvoid function0( int );void function1( int );void function2( int );C+大學教程 2007.9C大學教程指針和基本指針的字符串課件int main() void (*f 3 )( int ) = function0, function1, function2 ; int choice; cout choice;聲明函數指針數組C+大學教程 2007.9C大學教程指針和基本指針的字符串課件 while ( ( choice = 0 ) & ( choice 3 ) ) (*f choice )( choic
38、e ); cout choice; cout Program execution completed. endl; return 0;通過函數指針調用不同函數C+大學教程 2007.9C大學教程指針和基本指針的字符串課件void function0( int a ) cout You entered a so function0 was callednn; void function1( int b ) cout You entered b so function1 was callednn; void function2( int c ) cout You entered c word;v通
39、過通過cin調用函數調用函數getline讀入一個字符串到一個字符讀入一個字符串到一個字符數組中。讀入時見到數組中。讀入時見到一個換行符號一個換行符號結束,結束,結果串中結果串中不含換行符。不含換行符。 char line80; cin.getline(line, 80);C+大學教程 2007.9C大學教程指針和基本指針的字符串課件v#include v提供了字符串操作、比較、查找、計算長度等函數提供了字符串操作、比較、查找、計算長度等函數char *strcpy(char *s1, const char *s2)把把s2復制到復制到s1,直到遇到直到遇到s2中的中的0。s1要保證足夠空間。
40、函數返回要保證足夠空間。函數返回s1的的值值char *strncpy(char *s1, const char *s2, size_t n)把把s2復制到復制到s1,且最多復制且最多復制n個字符。個字符。s1要保證足夠空間。函數返回的是要保證足夠空間。函數返回的是s1的值的值char *strcat(char *s1, contst char *s2) 把把s1與與s2拼接起來,結果存放到拼接起來,結果存放到s1中。程序員必須保證中。程序員必須保證s1有足夠的空有足夠的空間容納拼接結果。函數返回的是串間容納拼接結果。函數返回的是串s1。C+大學教程 2007.9C大學教程指針和基本指針的字符
41、串課件int strcmp(const char *s1, const char *s2)按照字典次序比較按照字典次序比較s1和和s2,s1s2 結果結果 s2 0char *strcpy(char *s1, const char *s2)把把s2復制到復制到s1,直到遇到直到遇到s2中中的的0。s1要保證足夠空間。函要保證足夠空間。函數返回的是數返回的是s1size_t strlen(const char *s)函數返回函數返回0前的字符個數前的字符個數C+大學教程 2007.9C大學教程指針和基本指針的字符串課件#include using std:cout;using std:endl;
42、#include / prototypes for strcat and strncatusing std:strcat; using std:strncat; int main()C+大學教程 2007.9C大學教程指針和基本指針的字符串課件 char s1 20 = Happy ; / length 6 char s2 = New Year ; / length 9 char s3 40 = ; cout s1 = s1 ns2 = s2; strcat( s1, s2 ); / concatenate s2 to s1 (length 15) cout nnAfter strcat(s1
43、, s2):ns1 = s1 ns2 = s2; / concatenate first 6 characters of s1 to s3 strncat( s3, s1, 6 ); / places 0 after last characterC+大學教程 2007.9C大學教程指針和基本指針的字符串課件 cout nnAfter strncat(s3, s1, 6):ns1 = s1 ns3 = s3; strcat( s3, s1 ); / concatenate s1 to s3 cout nnAfter strcat(s3, s1):ns1 = s1 ns3 = s3 endl; r
44、eturn 0; C+大學教程 2007.9C大學教程指針和基本指針的字符串課件#include using std:cout;using std:endl;#include / prototype for strtokusing std:strtok; int main()C+大學教程 2007.9C大學教程指針和基本指針的字符串課件 char sentence = This is a sentence with 7 tokens; char *tokenPtr; cout The string to be tokenized is:n sentence nnThe tokens are:nn; / begin tokenization of sentence tokenPtr = strtok( sentence, );C+大學教程 2007.9C大學教程指針和基本指針的字符串課件 / continue tokenizing sentence until tokenPtr becomes NULL while ( tokenPtr != NULL ) cout tokenPtr n; tokenPtr = strtok( NULL, ); / get next token / en
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通行業(yè)中的安全文化推廣
- 不同文化背景下的服務溝通策略解析
- 從太陽到家溫暖你的每一天-家用太陽能供暖系統(tǒng)介紹
- 體育與教育融合的未來趨勢分析
- 辦公區(qū)域實驗室內務管理與規(guī)范
- 電子產品質檢工藝流程
- 從手工到智能工業(yè)4.0時代辦公生產管理轉變
- 辦公室中的學生自助餐廳管理與服務提升
- 兒童數學邏輯能力培養(yǎng)路徑研究
- 企業(yè)領導力培養(yǎng)中的情商教育實踐
- 一年級語文上冊百詞競賽(含答案)
- 國家開放大學《中文學科論文寫作》形考任務(1-4)試題及答案解析
- 魯迅《藥》課本劇劇本
- 集成電路板維修方法
- 小升初小學數學幾何圖形應用題專題練習《巧算周長》
- 外科洗手法-課件
- 人員定位系統(tǒng)管理制度管理辦法規(guī)定匯編(修訂完稿)
- 斷路器試驗精品課件
- TSG-R0005-2022《移動式壓力容器安全技術監(jiān)察規(guī)程》(2022版)
- Q∕SY 03026-2019 石腦油-行業(yè)標準
- 定向井及水平井基礎知識介紹
評論
0/150
提交評論