九章指针ppt课件.ppt

上传人:本田雅阁 文档编号:2551879 上传时间:2019-04-07 格式:PPT 页数:111 大小:847.51KB
返回 下载 相关 举报
九章指针ppt课件.ppt_第1页
第1页 / 共111页
九章指针ppt课件.ppt_第2页
第2页 / 共111页
九章指针ppt课件.ppt_第3页
第3页 / 共111页
亲,该文档总共111页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《九章指针ppt课件.ppt》由会员分享,可在线阅读,更多相关《九章指针ppt课件.ppt(111页珍藏版)》请在三一文库上搜索。

1、第九章 指 针,本章要点: 了解地址与指针的概念 熟练掌握指针变量的定义、初始化及指针的运算 掌握指针与数组、指针数组、二级指针等知识 熟练掌握字符串的指针与指向字符串的指针变量 了解指针与函数的概念 掌握指针作为函数参数的应用 了解多维数组指针的概念,指针是C语言中最重要的组成部分。利用指针可以表示 复杂的数据结构;动态分配内存;灵活处理字符串和数组;直接处理内存地址; 从函数调用中获取多个值等。,对变量值的存取实质上是通过地址进行的。,示意图,9.1 指针的概念,C 语言中,任何一个变量名实质上都代表着内存中的某一个存储单元,每一个存储单元都有一个地址。C系统能自动将变量名和它的地址联系起

2、来。,变量定义及内存分配实例,对变量的两种访问方式:直接访问 和 间接访问,int i , j , k ; i = 3 ; j = 6 ; k = 9 ; 则编译时系统分别为 i , j , k 各分配 2 个字节。 如: 2000 , 2001 i 2002 , 2003 j 2004 , 2005 k,例,图,如: int i = 3 ; printf ( “ %d ” , i ) ; 执行是: 根据变量名 i 找到 i 的地址 ( 如: 2000 ),然后 从地址 2000 开始的两个字节中取出数据(即变量的值 3 ), 再将其输出。这种据变量名按变量地址存取变量的值的 方式叫 “ 直接

3、访问 ”方式。,说明,重点,重点,指针: 一个变量的地址叫该变量的 “ 指针 ”。 指针变量: 用于存放其它变量的地址的变量。 指向:如 i_pointer= &i ,就称i_pointer指向变量i 目标变量: 指针变量所指向的变量。,有关指针的几个概念:,说明: 1. 类型说明符表示指针变量所指向的变量的类型,同类型变量的地址才能放到指向该类型变量的指针变量中。例如 2. 不能把一个整型量或任何其它非地址类型的数据赋给一个指针变量。例如,示例一 实例二,9.2 变量的指针和指向变量的指针变量 一、指针变量的定义,格式: 类型说明符 *标识符,如: int *pointer_1 , *poi

4、nter_2 ; float *fp1 , *fp2 ;,例,例,flaot f1 ; int *p ; p = ( 不正确 ),例,如: int *p ; p = 100 ; (不合法) 但: p = NULL 或 p = 0 或 p = 0 则是合法 的,都表示为指针赋了“空值”。 这并不意味着 p 指向 地址为0 的单元,而是不指向任何单元,但 p 中有确定的值。,例,二、指针变量的引用 例 9.1 main ( ) int a , b ; int *p1 , *p2 ; a = 100 ; b = 10 ; p1 = 结果: 100 , 10 100 , 10,“直接访问”方式,“间接

5、访问”方式,关于 & 与 * 运算符的说明: 1: & 是取地址运算符。 例如 2. & , * , + + , 同优先级, 按从右至左方向结合。,示例1 示例2 示例3,如: int a , *p1 , *p2 ; p1 = 则: p2 也指向变量 a,例子,如: &a , &b 等。 * 是指针运算符。 用于定义时表示其后的标识符是指针变量。而在程序中*p 则表示指针变量 p 所指向的变量,即目标变量。,例子,例子,如: int a , *p1 ; p1 = 则: (*p1) + + 等价于 a + + 但注意 *p1+ + 不等价于 (*p1) + + 因为 *p1+ + 等价于 *(

6、p1+ + ) 即先得 p1 所指向变量的值,再使指针变量 p1的值自增。,例子,例 9.2 main ( ) int *p1 , *p2 , *p , a , b ; scanf ( “ %d , %d ” , 如输入: 5 , 9 输出: a = 5 , b = 9 max = 9 , min = 5 数据指针交换示意图 注意事项,进行地址交换,本程序是采用交换变量 a 和 b 的地址来实现两个数的比较的。且比较前后 a , b 的值并未发生变化,重点,重点,三、 指针变量作为函数的参数 函数调用时,把实际参数的值传递给形式参数。 指针变量可以作实际参数,其作用也是将实际参数的值传递给形式

7、参数,这个时候的值代表是将一个变量的地址,把地址传送给被调函数的形式参数。,例 9.3 swap ( int *p1 , int *p2 ) int p ; p = *p1 ; *p1 = *p2 ; *p2 = p ; main ( ) int a , b , *pointer_1 , *pointer_2 ; scanf ( “ %d , %d ” , ,交换目标变量,即值的交换,若输入: 5 , 9 输出为: 9 , 5,&a,&b,5,9,a,b,pointer_1,pointer_2,&a,&b,&a,&b,5,9,a,b,p1,p2,pointer_1,pointer_2,&a,&

8、a,&b,&b,9,5,p1,pointer_1,p2,pointer_2,a,b,&a,&b,9,5,a,b,pointer_1,pointer_2,(a),(b),(c),(d),本程序采用的是交换 a 和 b 的值,而 p1和 p2 的值不变。 同例9.2相反.,如果把 swap 函数改成 : swap (int *p1 , int *p2 ) int *p ; *p = *p1 ; *p1 = *p2 ; *p2 = *p ; ,此句有问题,swap ( int x , int y ) int t ; t = x ; x = y ; y = t ; ,5,5,9,9,5,9,9,5,a

9、,b,x,y,a,b,x,y,(a),(b),main ( ) int a , b ; scanf (“ %d , %d ” , ,说明: 1. 如想通过函数调用得到 n 个要改变的值。 (1) 在主调函数中设 n 个变量,并用 n 个指针变量 指向它们。 (2) 将指针变量作实参,使 n 个变量的地址传给所 调用的函数形参。 (3) 通过形参指针变量,改变该 n 个变量的值。 (4) 主调函数中就可以使用这些改变了值的变量。 2. 不能通过改变形参指针变量本身的值而使实参指 针变量的值改变。,&a,p1,&a,q1,函数调用时,&b,q1,在被调函数中,3. 可以通过改变形参指针变量所指向的

10、变量的值来改 变实参指针变量所指向的变量的值。,5,a,&a,p1,&a,q1,补例1: void point ( int *q1 ) q1 + = 2 ; main( ) int *p1 , a = 4 ; p1= ,4,a,&a,p1,&a,q1,补例2: void point ( int *q1 ) *q1 + = 2 ; main( ) int *p1 , a = 4 ; p1= ,swap (int *p1 , int *p2 ) int *p ; p = p1 ; p1 = p2 ; p2 = p ; main ( ) int a , b , *pointer_1 , *point

11、er_2 ; scanf ( “ %d , %d ” , ,本函数中试图通过改变形参指针变 量的值来使实参指针变量的值改变,(a),exchange ( int *q1 , int *q2 , int *q3 ) if (*q1 *q2) swap ( q1 , q2 ) ; if (*q1 *q3) swap ( q1 , q3 ) ; if (*q2 *q3) swap ( q2 , q3 ) ; ,例 9.4 swap ( int *pt1 , int *pt2 ) int p ; p = *pt1 ; *pt1 = *pt2 ; *pt2 = p ; ,main ( ) int a ,

12、 b , c , *p1 , *p2 , *p3 ; scanf ( “ %d , %d , %d ”, ,运行如下: 9 , 0 , 10 10 , 9 , 0,9,0,10,p1,a,b,c,p2,p3,9,0,10,q1,b,c,q2,q3,a,exchange,9,0,pt1,b,pt2,a,swap,p1,q1,p1,9.3 数组的指针和指向数组的指针变量 C 语言中,指针变量可以指向变量,也可以指向数组和数组元素。,数组的指针: 数组的起始地址( 首地址 ) 数组元素的指针: 数组元素的地址,一、指向一维数组的指针变量的定义与赋值 指向数组的指针变量的定义同指向变量的指针变量的 定

13、义相同。 如: int a10 ; int *p ; 若: p = 的含义是将数组的首地址赋给指针变量 p ,而不是赋给 ( *p ) 。,二、 通过指针引用数组元素 如: int a10 , *p ; p = a ; 则: (1) p a0的地址 p + 1 a1的地址 p + i ai的地址 (2) *p =a0 , *(p +1) = =a1 , *(p +i) = = ai 说明: 1. 数组元素在内存中是连续存放的, C 语言规定, 指针变量 p + 1 指向下一个元素 (不是简单的加 1 ) 如数组元素为实型, 则 p + 1 所表示的实际地址是 p + 1 d = p + 1 4

14、 ( d 为一个数组元素所占的字节数),2. ( p + i ) 表示指向 ai 的地址,而 a + i 也表示 ai 的地址,故 程序中( p + i ) 等价于 a + i 。 如: p + 2 ; a + 2 ; 3. 指向数组的指针变量可以带下标。 如: pi *( p +i ) 综上所述: 数组元素的引用可以: (1) 下标法: 数组名下标 或 指针变量名下标 (2) 指针法: *(p +i) 或 *(a +i) (假定: int a10 , *p = a ; ),例 9.5 用三种方法输出数组各元素。 (1)下标法 main ( ) int a10 , i ; for ( i =

15、0 ; i 10 ; i + + ) scanf ( “ %d ”, ,(2)用数组名计算元素地址 main ( ) int a10 , i ; for ( i = 0 ; i 10 ; i + + ) scanf ( “ %d ”, ,(3) 用指针变量指向数组元素 main ( ) int a10 , i , *p ; for ( i = 0 ; i 10 ; i + + ) scanf ( “ %d ”, ,注意几点: (1) 指针变量可以作自增,自减运算。 如: + + p , p 而数组名不能作自增,自减运算。 如: a + + , a 等均不合法。因为数组名是常量。 (2) 注意指

16、针变量的当前值。 如: 例 9.6,main ( ) int a10 , i , *p ; p = a ; for ( i = 0 ; i 10 ; i + + ) scanf ( “ %d ”, p + + ) ; printf ( “ n” ) ; for ( i = 0 ; i 10 ; i + + , p + + ) printf ( “%d ”, *p ) ; ,(3) 注意指针变量的运算 如: int a10 , i , *p ; p = a ; 则: a. p + + (或 p + = 1 ) 表示 p 指向 a1 , 此时若执行 *p 则取出 a1 元素的值。 b. “*” 与

17、 “+ +” 同优先级,自右往左结合。 如: *p + + 等效于 *(p + + ) , 即先取 p 所指向变量的值, 再使 p + 1。而 *(p + + ) 与*(+ + p ) 的作用不同。前 者先取*p 的值,后使p + 1 ; 后者是先使 p + 1 ,再 取 *p 的值 。 c. (*p) + + 表示使目标变量的值加 1 。 而不是指针变 量的值加 1 d. *(p + + ) 等价于 ai + + *(+ + p ) 等价于 a+ + i 即先使 p 自增,再作 * 运算。,如: main ( ) int a100 , *p ; p = a ; while ( p a +10

18、0 ) printf ( “ %d ”, *p + + ) ; ,main ( ) int a100 , *p ; p = a ; while ( p a +100 ) printf ( “ %d ”, *p ) ; p + + ; ,三、 数组名作函数参数 数组名作函数参数时,实际上是将实参数组的首地址 传给形参。这样实参数组与形参数组共占同一段内存。 使得在调用函数过程中,形参数组中元素值发生变化也 就使实参数组的元素值随之而发生变化。,main ( ) f ( int arr , int n ) int array10 ; f ( array , 10 ) ; ,void inv ( i

19、nt x , int n ) int t , i , j , m = (n 1) /2 ; for ( i = 0 ; i = m ; i + + ) j = n 1 i ; t = xi ; xi = xj ; xj = t ; return ; ,可去掉,例 9.7 将数组 a 中 n 个整数按相反顺序存放。 即将第一个元素和最后一个元素对换,将第二个同倒 数第二个对换. .即两两对换,直到: a(n 1) /2 与 a n ( n 1 ) / 2 1 对换为止。,void main ( ) static int i , a10 = 3 ,7 ,9 ,11 ,0 ,6 ,7 ,5 , 4

20、, 2 ; printf ( “ The original array : n ” ) ; for ( i = 0 ; i 10 ; i + + ) printf ( “ %d , ”, ai ) ; printf ( “ n ” ) ; inv ( a , 10 ) ; printf ( “ The array has been inverted : n ” ) ; for ( i = 0 ; i 10 ; i + + ) printf ( “ %d , ”, ai ) ; printf ( “ n ” ) ; ,运行结果: The original array : 3 , 7 , 9 ,

21、11 , 0 , 6 , 7 , 5 , 4 , 2 The array has been inverted : 2 , 4 , 5 , 7 , 6 , 0 , 11 , 9 , 7 , 3,以上程序也可以改为如下: void inv ( int *x , int n ) int *p , t , *i , *j , m = (n 1) /2 ; i = x ; j = x + n 1 ; p = x + m ; for ( ; i = p ; i + + , j ) t = *i ; *i = *j ; *j = t ; return ; ,main ( ) static int i , a

22、10 = 3, 7, 9, 11, 0, 6, 7, 5 , 4 , 2 ; printf ( “ The original array : n ” ) ; for ( i = 0 ; i 10 ; i + + ) printf ( “ %d ”, ai ) ; printf ( “ n ” ) ; inv ( a , 10 ) ; printf ( “ The array has been inverted : n ” ) ; for ( i = 0 ; i 10 ; i + + ) printf ( “ %d ”, ai ) ; printf ( “ n ” ) ; ,int max ,

23、min ; void max_min_value ( int array , int n ) int *p , *array_end ; array_end = array + n ; max = min = *array ; for ( p = array + 1 ; p max ) max = *p ; else if ( *p min ) min = *p ; return ; ,等价于*(array + 0) 即 array0,例 9.8 从 10 个数中找出其中最大值和最小值,void main ( ) int i , number10 ; printf ( “ enter 10 d

24、ata n ”) ; for ( i = 0 ; i 10 ; i + + ) scanf ( “ %d ”, 运行结果: enter 10 data 2 4 6 8 0 3 45 67 89 100 max = 100 , min = 3,此例也可改用指针变量来传送地址,程序可改为: int max , min ; void max_min_value ( int *array , int n ) int *p , *array_end ; array_end = array + n ; max = min = *array ; for ( p = array + 1 ; p max ) m

25、ax = *p ; else if ( *p min ) min = *p ; return ; ,void main ( ) int i , number10 , *p ; p = number ; printf ( “ enter 10 data n ”) ; for ( i = 0 ; i 10 ; i + + , p + + ) scanf ( “ %d ”, p ) ; printf ( “ the 10 data : n ” ) ; for ( p = number , i = 0 ; i 10 ; i + + , p + + ) printf ( “ %d ”, *p ) ; p

26、 = number ; max_min_value( p , 10 ) ; printf ( “ n max = %d , min = %d n ”, max , min ) ; ,for ( p = number ; p ( number +10 ) ; p + + ),综上所述,对于实参数组想在被调函数中改变此数组元素的值,实参与形参的对应关系可以如下:,(1) 二者都用数组名 main ( ) f ( int x , int n ) int a10 ; f ( a , 10 ) ; 特点: a 和 x 数组共用同一段内存单元。 (2) 实参为数组名,形参用指针变量 main ( ) f

27、( int *x , int n ) int a10 ; f ( a , 10 ) ; ,(2) 实参为数组名,形参用指针变量 main ( ) f ( int *x , int n ) int a10 ; f ( a , 10 ) ; 特点: 实参将数组的首地址传给形参指针变量,通过指 针变量指向数组中的任一元素,进而作相应的处理。,(3) 二者都用指针变量 main ( ) f ( int *x , int n ) int a10 , *p ; p = a ; f ( p , 10 ) ; 特点: 先使 p 指向 a 数组,再将 p 传给 x , 使 x 也指向 a 数组,从而进行处理。,

28、(4) 实参为指针变量,而形参为数组名 main ( ) f ( int x , int n ) int a10 , *p ; p = a ; f ( p , 10 ) ; 特点: 利用指针变量将 a 数组的首地址传给 x 数组。使 两数组共用同一段内存单元。利用xi值的变化,使ai的值也发生变化。 注意: 在上述四种处理方式中,当用指针变量作实参时,必须先使指针变量有确定的值,即指向一个已定 义的数组。,四、二维数组的指针和指向二维数组的指针变量 1. 二维数组和数组元素的地址 C 语言中二维数组实际上是由若干个按行存放的一维数组构成的。如: int a34 ; a0 a00 a01 a02

29、 a03 a1 a10 a11 a12 a13 a2 a20 a21 a22 a23 a 代表首元素的地址,而此时首元素a0又是一个包含有 4个元素的一维数组。所以 a (或 a + 0 )表示二维数组第0 行的地址。同理: a + 1 , a + 2 分别表示二维数组第 1 行和第 2 行的地址。所以,二维数组名是一个行指针。 a0,a1,a2分别表示一维数组名,所以a0代表 一维数组a0中第0列元素的地址,即 &a00。,a,同理: a1的值为,如:p = a0 ; 或 p = 因为尽管 a0 和 a 都表示地址且 值相同,但二者的地址基类型不同。 即 a0 是一个列地址,而 a 是一个

30、行地址。,#include “ stdio.h ” void main ( ) int a34=1, 2, 3, 4, 9, 8, 7, 6, 10, 11, 5, 2; int *p = a0 ; ( 或 int *p = (2) 指向二维数组的行指针变量 由于二维数组是由按行存放的一维数组构成,C 语 言中可以用行指针变量来引用二维数组元素。,定义格式: 数据类型 (* 标示符 )常量 如: int ( *p)4 ; 表示 p 所指的对象是有 4 个整型元素的数组。 int a34 , ( *p)4 ; 若:p = a ; 则 p 是指向 a 数组第 0 行的指针变量, 即 p 是一个行指

31、针变量。 此时,p +1则指向 a 数组第 1 行, p + i 则指向 a 数组第 i 行。 所以, *( p + i ) + j 表示 a 数组 中第 i 行 j 列元素的地址。 而 *(*( p + i ) + j ) 则表示表示 a 数组中第 i 行 j 列元素的值。 注意不能写成 p = a0 。,1 3 5 7,2 4 6 8,11 12 13 14,p,p+1,例: 输出二维数组任意行任意例元素的值。 void main ( ) int a34=1, 2, 3, 4, 9, 8, 7, 6, 10, 11, 5, 2; int ( *p)4 , i , j ; p = a ; s

32、cnaf( “ i = %d , j =%d ” , 3. 二维数组名和指向二维数组的指针变量作函数参数 补充例:用函数调用方式编写程序找出二维数组a 中每 行的最小值并输出。要求: (1) 二维数组元素的值用随机函数产生( 0 50)之间 (2) 每行中元素的最小值在line_min( ) 函数中求出。 (3) 在主函数中输出每行的最小值。,void main( ) 1、 定义一个二维数组 2、 调随机函数对二维数组 元素赋值 3、 调用 line_min 函数 4、 输出结果到屏幕 ,line_min ( ) 1、 接收实参 2、求二维数组每行中的最小值 ,方法一、用列指针来求解 #inc

33、lude “ stdlib.h ” #define N 3 #define M 4 void main ( ) int aNM , min , i , j ; for( i = 0 ; i N ; i + +) for( j = 0 ; j M ; j + +) aij= random( 50 ) ; printf( “ %4d ” , aij ) ; if( j+1)%4 = = 0 ) printf( “n” ) ; for( i = 0 ; i N ; i + +) min = line_min( ai ) ; printf( “ a%d: min = %d n ” , i , min

34、) ; ,line_min ( int * p ) int j , min ; min= *(p + 0) ; for( j = 1 ; j *( p + j ) ) min = * ( p + j ) ; return min ; 方法二、用行指针来求解,#include “ stdlib.h ” #define N 3 #define M 4 void main ( ) int aNM , min , i , j ; for( i = 0 ; i N ; i + +) for( j = 0 ; j M ; j + +) aij= random( 50 ) ; printf( “ %4d ”

35、 , aij ) ; if( j+1)%4 = = 0 ) printf( “n” ) ; for( i = 0 ; i N ; i + +) min = line_min( a + i ) ; printf( “ a%d: min = %d n ” , i , min ) ; ,line_min ( int (* p)M ) int j , min ; min= * (*p) ; for( j = 1 ; j * (* p + j ) ) min = * (* p + j ) ; return min ; 说明:random( x ) 函数能产生一个 ( 0 x 1) 间的随机整数。 相关的

36、函数有: rand( ) ,其功能是产生 0 32767间的随机数。 如: ( rand( )%90 + 10.0 ) / 10.0 就能产生 1.0 10.0 之间的实数。,9.4 字符串的指针和指向字符串的指针变量 字符串的指针就是字符串的首地址。 一、 字符串的表示形式 1: 用字符数组实现 例 9.16 main ( ) static char string = “ I Love China ” ; printf ( “ %sn ” , string ) ; 例中 string 是数组名, 它表示字符数组的首地址。 相应的 stringi 表示数组中的一个元素。如: string4 代

37、表第 5 个元素,即 字母 v 2: 用字符指针实现,char *string ; string = “ I Love China ” ; 或者: char *string = “ I Love China ” ; 其含义是将字符串的首地址赋给指针变量 string 。 尽管没有直接定义字符型数组,但实际上 C 语言对字符 串常量均按字符数组来处理。即在内存中开辟了一个字符 数组用来存放字符串常量。 例 9.17 main ( ) char *string = “ I Love China ” ; printf ( “ %sn ” , string ) ; ,注意: C 语言中对字符串可以进行

38、整体输入和输出。 而对数值型数组则不能用数组名来输出它的全部 元素,只能逐个元素输出。 对字符串的处理可以用下标法,也可用指针法。 例 9.18 将字符串 a 复制到字符串 b 。 main ( ) char a = “ I am a boy .” , b20 ; for ( i = 0 ; *( a + i ) ! = 0 ; i + +) *( b + i ) = *( a + i ) ; *( b + i ) = 0 ; printf ( “ string a is : %s n ”, a ) ;,printf ( “ string b is : ” ) ; for ( i = 0 ;

39、bi ! = 0 ; i + +) printf ( “ %c ”, bi ) ; printf ( “ n ” ) ; 运行结果: string a is : I am a boy . string b is : I am a boy . 例 9.19 用指针变量来处理例 9.18 问题. main ( ) char a = “ I am a boy .” , b20 , *p1 , *p2 ; int i ; p1 = a ; p2 = b ; for ( ; *p1! = 0 ; p1 + + , p2 + + ),*p2 = *p1 ; *p2 = 0 ; printf ( “ str

40、ing a is : %sn ”, a ) ; printf ( “ string b is : ” ) ; for ( i = 0 ; bi ! = 0 ; i + +) printf ( “ %c ”, bi ) ; printf ( “ n ” ) ; ,I,a,m,a,b,o,y,.,0,a,p1,p1,b,p2,p2,二、 字符串指针作函数参数 用字符数组名和指向字符串的指针 变量作函数参数,均可以处理字符串。 例 9.20 用函数调用实现字符串的复制。,I,0,(1) 用字符数组作函数参数 void copy_string ( char from , char to ) int i

41、 = 0 ; while ( from i ! = 0 ) ( 先判断,后赋值 ) toi = from i ; i + + ; toi = 0 ; main ( ) char a = “ I am a teacher .” ; char b = “ you are a student .” ; printf ( “ string_a = %sn string_b = %sn ”, a , b ) ; copy_string ( a , b ) ; printf ( “ n string_a = %sn string_b = %sn ”, a , b ) ; ,运行结果: string_a =

42、 I am a teacher . string_b = you are a student . string_a = I am a teacher . string_b = I am a teacher . 本程序 main 函数中也可用字符型指针变量。 改写如下: main ( ) char *a = “ I am a teacher .” ; char *b = “ you are a student .” ; printf ( “ string_a = %sn string_b = %sn ”, a , b ) ; copy_string ( a , b ) ; printf ( “

43、n string_a = %sn string_b = %sn ”, a , b ) ; ,(2) 形参用字符指针变量 void copy_string ( char *from , char *to ) for ( ; *from ! = 0 ; from + + , to + + ) *to = *from ; *to = 0 ; main ( ) char *a = “ I am a teacher .” ; char *b = “ you are a student .” ; printf ( “ string_a = %sn string_b = %sn ”, a , b ) ; copy_string ( a , b ) ; printf ( “ n string_a = %sn string_b = %sn ”, a , b ) ; ,(3) 对 copy_string 函数的简化 a . void copy_string ( char *from , char *to ) while ( (*to = *from ) ! = 0 )

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1