收藏 分享(赏)

C语言指针讲解PPT.ppt

上传人:kpmy5893 文档编号:8409068 上传时间:2019-06-25 格式:PPT 页数:141 大小:1.14MB
下载 相关 举报
C语言指针讲解PPT.ppt_第1页
第1页 / 共141页
C语言指针讲解PPT.ppt_第2页
第2页 / 共141页
C语言指针讲解PPT.ppt_第3页
第3页 / 共141页
C语言指针讲解PPT.ppt_第4页
第4页 / 共141页
C语言指针讲解PPT.ppt_第5页
第5页 / 共141页
点击查看更多>>
资源描述

1、1,第八章 指针,C语言程序设计,2,本章主要内容,地址与指针的概念 指针与变量 指针与数组 指针与字符串 指针与函数 指针数组 指针的指针 指针小结,3,8.1 地址与指针的概念,变量的存储 例:int i = 3; 含义: i 在内存拥有2字节存储空间 i 的地址: i 所属存储空间第一个单元的地址,记为:&i ,假设为0x2000 i 的值:设为3,记为:i = 3,关于内存地址,4,8.1 地址与指针的概念,变量的访问 用户通过变量名访问例: printf( “%d“, i ); 此方式称为直接访问方式 内存通过地址访问 系统:从变量分配表中查出变量 i 地址 2000 内存: 读出2

2、000开始2个字节( int型 )中的数据 总结:只要知道变量的地址即可发出指令访问变量 指针:变量的地址,关于内存地址,5,8.1 地址与指针的概念,变量的间接访问 用户通过变量地址指针来访问变量 方法: 定义一个指针变量存放一个变量的地址( 指针 ) 通过指针变量中的地址( 指针 )来访问此变量,关于指针,6,8.1 地址与指针的概念,概念: 指针变量:用于存放指针( 变量的地址 )的变量 如:变量 p 指向:当指针变量中存放某个变量地址时,称为该指针变量指向这个变量 例: p 中存放的是变量 i 的 地址:0x2000则称:p 指向 i 用途:通过 p 间接访问 i,关于指针,7,8.2

3、 指针与变量,变量的地址称为这个变量的指针 当一个指针变量中存放的是变量的地址时, 此指针变量称为指向变量的指针变量,8,语法形式 数据类型 *指针变量名; 例: int *p 说明: 指针变量的类型是指针所指变量的类型 * 是指针变量的标志,不是指针变量名 VC环境下指针变量在内存中与 unsigned long int型变量占用同样字节的存储单元 指针变量必须确定指向后才能使用,办法是给指针变量赋一个地址值,指针与变量,指针变量的定义,9,指针赋值语法形式指针名 = 地址 例:int i, *p; p = ,指针变量的赋值,指针与变量,10,指针与变量,指针变量的初始化,语法形式 数据类型

4、 *指针名初始地址; 例: int a, *pa = ,11,指针与变量,指针变量的引用,通过指针变量可以间接访问所指向的变量 语法形式*指针变量名 例:int i, *p = ,*:指针运算符,表示所指向变量,优先级和结合性与同单目运算符,与i = 3等价,3,12,指针使用实例,#include /* TC8.2-1.C */ void main( ) int *p; /* 定义指针变量p */int i = 10; p = ,指针与变量,程序运行的结果是:i = 10*p = 10&i = 12ff78p = 12ff78i = 15,下一页,前一页,14,指针使用练习,#include

5、 /* TC8.2-5.C */ void main( ) int a = 3, b = 0;int *p = ,指针与变量,运行结果: a = 4, b = 3,15,指针变量的算术运算,指针与整数的加减运算( p + n 或 p n ) 指针 p 加上或减去 整数n ,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。 实际位置:p + n * sizeof( 指针类型 ) 指针加一,减一运算( p+ 或 p- ) 指向下一个或前一个数据。 注意:y = *px+ 相当于 y = *( px+ ) (*和+优先级相同,自右向左运算),指针与变量,下一页,前一页,pa+,pa-,lo

6、ng *pb,下一页,前一页, p1, p2,则:p2 - p1 = 3p1 p2 = -3,18,指针变量的算术运算,两个相同类型的指针相减( p2 - p1 ) p2 - p1 意义是两个指针之间相隔多少个数据 实际位置:( p2 p1 ) / sizeof ( 指针类型 ) 值为正时 p2 在 p1 后面( 地址较高 ),为负时 p2 在 p1 前面( 地址较低 ) 注意:p1 和 p2 类型必须相同,指针与变量,19,关系运算 指向相同类型数据的指针之间可以进行各种关系运算。 例: p q 成立时,p 指向较高字节 p = q 成立时,p, q 指向同一变量 指向不同数据类型的指针,以

7、及指针与一般整数变量之间的关系运算是无意义的。 int *p; char *s; s p 或 p 2000 指针可以和零之间进行等于或不等于的关系运算。 例如:p = 0 或 p != 0,指针变量的关系运算,指针与变量,20,指针变量的赋值运算,赋值运算 向指针变量赋的值必须是地址常量或变量,不能是普通整数。 例:p = 2000 可以赋值为整数0,表示空指针。 例:p = 0 或 p = NULL 说明:NULL是系统定义标识符,表示0,指针与变量,void main( ) /* TC8.2-2.C */ short int *p1, *p2; /* 定义整型指针变量p1, p2 */sh

8、ort int i = 10, j = 20, m5; float f = 3.5, *pf = ,指针变量运算实例,前一页,下一页,运行结果:p1 = 1245044, &i = 1245044p1+1 = 1245046p1+3 = 1245050pf = 1245024, &f = 1245024pf+1 = 1245028&i =1245044, &j =1245040p2 p1 = 0p1-m0, p2-m3p2 - p1 = 3p1 - p2 = -3,指针变量运算实例,前一页,下一页,23,变量的指针作函数参数,指向变量的指针可以作为函数形参 对应实参为变量地址或已有值的指针变量

9、 此时仍然进行单向值传递,不过传递的值本身是地址 指针变量作函数的参数的好处 可以访问和修改另一个函数中的局部变量 从函数中返回多个值,指针与变量,24,#include /* TC8.2-3.C */ void Swap( int *a, int * ); void main( ) int x = 5 , y = 10 ;int *p1 = ,实例两整数交换,指针与变量,可直接用:Swap( &x, &y),25,运行结果:x=5 y=10x= 10 y= 5,指针与变量,实例两整数交换,26,#include /* TC8.2-3A.C */ void Swap( int *, int *

10、 ); void main( ) int x = 5 , y = 10 ;int *p1 = ,实例两整数交换,指针与变量,27,运行结果:x=5 y=10x= 5 y= 10,指针与变量,实例两整数交换,Swap( x, y );void Swap( int a, int b ) int t;t = a; a = b; b = t; ,Swap( x, y );void Swap( int ,下一页,前一页,Swap( ,Swap( ,29,将输入的三个整数按从大到小顺序输出 #include /* TC8.2-4.C */ void exchange( int *q1, int *q2,

11、int *q3 ); void swap( int *, int * ); void main( ) int x, y, z;int *p1 = ,指针变量作函数参数实例,指针与变量,实参是有指向指针变量,形参是指针变量,30,void 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 ); void swap( int *a, int *b ) int t;t = *a; *a = *b; *b =

12、 t; ,指针变量作函数参数实例,指针与变量,运行结果: 12 37 29 x = 37, y = 29, z = 12,相当于( x y ),交换的是x 和 y 的值,31,变量指针作函数参数实例,下列程序的结果为:(TC8.2-7.c) void prt( int *x , int *y , int *z ) *x =10, *y = 40, *z = 20;printf( “%d, %d, %dn“, +*x, +*y, *(z+) ); void main( ) int a, b, c;prt ( ,结果: 11, 41, 20 a=11 b=41 c=20,形参是指针变量,实参是变量

13、的地址,32,#include /* TC8.2-5.C */ void sub( int x, int y, int *z ) *z = y - x; void main( ) int a, b, c;sub( 10, 5, ,指针变量作函数参数练习,指针与变量,运行结果: a = -5, b = -12, c = -7,33,8.3 指针与数组,指针变量可以指向数组元素,此时性质与指向变量没有区别 当指针变量里存放一个数组的首地址时,此指针变量称为指向数组的指针变量,简称数组的指针,34,数组的表示方法,数组表示的下标法: #include void main( ) int i, a =

14、1,3,5,7,9 ;for ( i = 0; i 5; i+ )printf(“%dt“, a i );printf(“n“ ); ,数组与指针的等价性,a 0 a 1 a 2 a 3 a 4 ,35,数组的表示方法,数组表示的地址常量法: #include void main( ) int i, a = 1,3,5,7,9 ;for ( i = 0; i 5; i+ )printf( “%dt“, *( a + i );printf( “n“ ); 结论:数组名 a 及 a + 1, 等都是指针,且为指针常量,数组与指针的等价性,36,指向数组的指针,可以定义指针变量指向任意一个数组元素

15、声明与赋值 例: int a 5 , *p;p = 则p+1指向a1, p+2指向a2. 通过指针引用数组元素 *p就是a0,*( p + 1 )就是a1,. ,*( p + i ) 就是 a i ,指针与数组,p,37,数组的表示方法,数组表示的指针变量法: #include void main( ) int i, a = 1, 3, 5, 7, 9 int *p = a;for ( i = 0; i 5; i+ )printf( “%dt“, *( p + i ) );printf( “n“ ); ,数组与指针的等价性,p,38,数组与指针的等价性,当一个指针变量指向数组首地址以后,指针变

16、量名就和数组名等价 上例: int a 5 , *p = a; 经过上述声明及赋值后: a i , *( a + i ) ,*( p + i ), p i 都是等效的 此特点称为指针与数组的等价性,指针与数组,39,数组的表示方法,数组表示的指针变量法2: #include void main( ) int i, a = 1, 3, 5, 7, 9 int *p;for ( p =a; p a + 5; p+ )printf( “%dt“, * p );printf( “n“ ); ,数组与指针,p,40,for ( i = 0; i 5; i+ )printf( “%dt“, a i );,

17、几种数组表示法的比较,指针与数组,for ( i = 0; i 5; i+ )printf( “%dt“, * ( a + i ) );,for ( i = 0; i 5; i+ )printf( “%dt“, * ( p + i ) );,for ( p = a; p p + 5; p+ )printf( “%dt“, * p );,效率相同 作地址运算,直接下移,41,数组与指针的等价性,指针变量处理数组小结 当有定义:int a10, *p = a 时 a i , *( p + i ), *( a + i ), p i 都是等效的,为数组 i 号元素的值 推论: 与 *( ) 等价 不能

18、写 a+,因为a是数组首地址是常量 使用第四种方式时,请注意循环结束时指针变量的指向,指针与数组,42,数组与指针的等价性,用指针变量法2处理数组时要注意指针的位置, 不要越界: #include void main( ) int i, a = 1, 3, 5, 7, 9 int *p;for ( p = a; p a + 5; p+ )printf( “%dt“, * p );printf( “%dn“, * p ); ,数组与指针,p,43,一维数组指针练习,下列程序的输出结果为:(TC8.3-6.C) main( ) int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9

19、, 10 ;int i, *p, s = 0;p = ,运行结果: s = 18,44,一维数组指针练习二,下列程序的功能是找出并输出三个数中的最小数,请填空: (TC8.3-7.C) main( ) int x3, i, *p;for ( i = 0; i x1 ) p = x + 1;if ( *p x2 ) p = x + 2;printf ( “ 最小值 = %dn“, ( 2 ) ); ,运行结果: p = &x0 *p,45,数组的指针作函数参数,指向数组的指针可以作为函数形参 对应实参为数组名或已有值的指针变量 此时仍然进行单向地址传递。,指针与数组,46,数组的指针作函数参数,

20、例 TC8.3-2.C:编写一个函数,将数组中10个整数完全颠倒顺序 分析: 算法:颠倒顺序采取从首尾开始,数组前后相对元素互换数值的方法 数据结构:定义二根指针变量 i 和 j 分别指向数组开头和结尾,对向扫描交换数值。当 i = j 时扫描结束,数组与指针,47,数组的指针作函数参数,#include /* TC8.3-2.C */ void inv( int *x, int n ); void main( ) int i,a = 3, 7, 9, 11, 0, 6, 7, 5, 4, 2 ; printf( “The original array:n“ ); for( i = 0; i

21、10; i+) printf( “%3d“, ai );printf( “n“ ); inv( a,10 ); printf( “The array has been inverted:n“ ); for( i = 0; i 10; i+ ) printf( “%3d“, ai ); printf( “n“ ); ,数组与指针,48,数组的指针作函数参数,void inv( int *x, int n ) int t,*i,*j; for(i = x, j = x + n - 1; i = j; i+, j- ) t = *i; *i = *j; *j = t; ,数组与指针,49,数组的指针

22、作函数参数,例 TC8.3-8.C:用选择法将数组中10个整数按从大到小顺序排序 算法:,数组与指针,第一次,第二次,第三次,第四次,第五次,50,数组的指针作函数参数,#include /* TC8.3-8.C */ void sort( int *x, int n ); void main( ) int i, a 10 , *p = a; printf( “请输入10个整数:n“ ); for( i = 0; i 10; i+) scanf( “%d“, p+ );p = a; sort( p, 10 ); printf( “排好序的数组:n“ ); for( p = a; p a + 1

23、0; p+ ) printf( “%3d“, *p ); printf( “n“ ); ,数组与指针,51,数组的指针作函数参数,void sort( int *x, int n ) int i, j, k, t; for( i = 0; i n - 1; i+) k = i;for ( j = i + 1; j n; j+ )if ( x j x k ) k = j;if ( k != i ) t = x i ; x i = x k ; x k = t; ,数组与指针,52,数组的指针作函数参数练习,下列程序的输出结果为:(TC8.3-9.C) fun ( int *p, int x, in

24、t *i ) int *q;for ( q = p; q p + 8; q+ )if( *q = x ) *i = q - p;return; void main( ) int a = 11,22,33,66,55,66,77,88 , x = 66, i = -1;fun ( a, x, ,数组与指针,运行结果: 3,以下程序是将数组a中的所有偶数放在数组b中,所有奇数放在数组c中,请填空(TC8.3-10.C) void fun ( int *a, int *b, int *c, int *m, int *n ) int i;(1) ;for ( i = 0; i 10; i+ )if(

25、ai % 2 = 0 ) b (2) = ai;else c (3) = ai; void main( ) int i, m, n, a = 1,2, 3, 8, 5, 7, 6, 10, 12 ,b10, c10;fun ( (4) , ,数组指针练习二,答案: 1. *m = *n = 0 2. (*m)+ 3. (*n)+ 4. a, b, c,下一页,前一页,以下程序的结果为?功能为? (TC8.3-10A.C) fun ( int *p ) int *q, *s;q = s = p;while ( p - s 10 ) if( *p % 2 ) *q = *p; q+; p+;ret

26、urn q - s; void main( ) int k, i, a10 = 1,19, 2, 3, 8, 5, 7, 6, 10, 12 ;k = fun ( a );for ( i = 0; i k; i+ ) printf( “%4d“, ai );printf( “n“ ); ,数组指针练习二,运行结果:1 19 3 5 7 功能: 删除数组中所有偶数,下一页,前一页,55,二维数组的指针,设有数组:int a34;,二维数组的地址,a 可看成一维数组a: *a = a 0 *( a+1 ) = a 1 *( a+2 ) = a 2 ,56,二维数组的指针,a0 , a1, a2 分

27、别是 数组0、1、2行首地址: *a = a 0 *( a+1 ) = a 1 *( a+2 ) = a 2 所以: a , *a , a 0 , &a 0 0 均为数组首地址 a1, *(a + 1) , a 1 , &a 1 0 均为数组 1 行首地址 结论:数组 i 行首地址为: ai, *( a + i ) , a i ,二维数组的地址,57,二维数组的指针,a0, a1, a2 分别是一维数组名,即数组首地址: a0 = &a00 a0 +1 = &a01 a0 + 2 = &a02 a1 = &a10 a1 +1 = &a11 a1 + 2 = &a12结论: a i + j =

28、&a i j 即为数组 i 行 j 列元素地址,二维数组的地址,58,二维数组的指针,a0 ,a1,a2分别是一维数组名:分别 *a 0 = a 0 0 *( a 0 +1 ) = a 0 1 *a 1 = a 1 0 *( a 1 +1 ) = a 1 1 *( *a )= a 0 0 *( *a +1 ) = a 0 1 *(*(a + 1 ) = a 1 0 *( *(a + 1) +1 ) ) = a 1 1 结论:a i j = *( *( a + i ) + j ),二维数组的地址,59,二维数组的指针,结论2:* 与 通用 数组元素的值: a i j = *( *( a + i

29、) + j ) = * ( a i + j ) = ( *( a + i ) ) j 数组元素的地址: &a i j = *( a + i ) + j = a i + j,二维数组的地址,#include /* TC8.3-3.C */ void main( ) int a34 = 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 ;printf( “ 数组 a 的首地址: n “ );printf( “%lx %lx %lxn“, a, *a, *(a+0) );printf( “%lx %lx %lxn“ , a0, ,下一页,前一页,在某次运行之后,程序

30、的输出结果为:数组a的首地址: 0x0065FDC8 0x0065FDC8 0x0065FDC8 0x0065FDC8 0x0065FDC8 0x0065FDC8数组1行的首地址: 0x0065FDD8 0x0065FDD8 0x0065FDD8 0x0065FDD8数组2行的首地址: 0x0065FDE8 0x0065FDE8 0x0065FDE8 0x0065FDE8数组元素a12的值: 13 13 13 13,下一页,前一页,#include /* TC8.3-3A.C */ void main( ) int i, j;short array23 = 11, 12, 13 , 21, 2

31、2, 23 ;for ( i = 0; i 2; i+ ) printf( “%lxn“, *( array + i ) ); printf( “%lxn“, ,二维数组的指针举例,下一页,前一页,某次运行后,程序输出结果为: 0X0065FDE0 0X0065FDE0 0X0065FDE6 0X0065FDE6 11,12,13 21,22,23,下一页,前一页,64,二维数组的指针,二维数组指针练习 设有:double a 2 3 = 1., 2., 3., 4., 5., 6. 且 a 数组首地址为:0x194 则:a = *a =&a1 = *&a1 = *( *( a + 1 ) +

32、 1 ) =*( a1 + 2 ) =,二维数组的指针举例,0x194,0x194,0x1AC,0x1AC,5.0,6.0,65,二维数组的指针,例: int x 2 3 , *p = x0 则:p + 1 指向x 0 1 ,指向数组元素的指针变量,for ( i = 0; i 6; i + )printf( “%d“, *( p + i ); 一般形式:设数组大小:x M N 则:x i j = *( p + i * N + j ) 例:&x12 = p + 1 * 3 + 2 = p + 5 结论:对普通指针变量 p + i 与 x + i 不等价,#include /* TC8.3-4.

33、C */ #define M 3 #define N 4 void main( ) int i, j, score M N , *p = (int * ) score;for( i = 0; i M * N; i+ ) *( p + i ) = i + 1;printf( “下标法输出: n “ );for( i = 0; i M; i+ ) for ( j = 0; j N; j+ )printf( “%3d“, score i j ); printf(“n“); printf( “数组元素指针法输出:n“ );for( i = 0; i M; i+ ) for ( j = 0; j N;

34、j+ )printf( “%3d“, *( p + N * i + j ) ); printf(“n“); ,下一页,前一页,指针变量与数组名不等价,计算机认为不是同类型地址,67,二维数组的指针练习,下面程序的功能是计算33矩阵中对角线元素的乘积,请填空。( TC8.3-11.C ) main( ) int a33, *p, i, j, s = ( 1 ) ;for( i = 0; i 3; i+ )for( j = 0; j 3; j+ )scanf( “%d“, ,答案: 1. 1 2.( int * ) a 3. s * ( * ( p + i * 3 + i ) ),68,二维数组的

35、指针,行指针定义: 数据类型 ( *指针变量名 ) m m 为正整数 例:int ( *p ) 4 p为指向有 m 个元素的一维数组的指针变量 行指针特点:只能指向一维数组的开头p + 1 指向 a 1 p + i 指向 a i 结论:指针变量 p 与数组名 a 等价 a i j = * ( * ( p + i ) + j ) = *( p i + j ) = ( *( p + i ) ) j = p i j ,指向一维数组的指针变量,#include /* TC8.3-4A.C */ #define M 3 #define N 4 void main( ) int i, j, scoreMN

36、 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ;int ( *p ) 4 = score;printf( “下标法输出: n“ );for( i = 0; i M; i+ ) for ( j = 0; j N; j+ )printf( “%3d“, score i j ); printf(“n“); printf( “行指针法输出:n“ );for( i = 0; i M; i+ ) for ( j = 0; j N; j+ )printf( “%3d“,*( *( p + i ) + j ) ); printf(“n“); ,下一页,前一页,70,二维数组

37、的指针练习,下面程序的输出为: ( TC8.3-12.C ) main( ) int a62 = 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 ;int (*p)2, i;p = a + 3;for ( i = 0; i 3; p+, i+ )printf( “%3d“, (*p)0 );p = a;printf( “n%dn“, *( * p + 1 ) );,运行结果: 13 17 21 3,71,二维数组的指针,两种形式指针变量均可使用 区别 行指针和数组名等价,普通指针按数组在内存中存储顺序依次指向。 普通指针变量赋值时,必须做强制类型转换,行指针

38、直接给数组名 行指针用于正常处理二维数组元素时 普通指针用于顺序处理二维数组时,二维数组指针的对比,72,二维数组的指针作函数参数,多维数组的指针作函数参数与一维数组相似 两种形式指针变量均可使用 用普通指针变量时,如果实参为数组名则要做强制类型转换,指针与数组,73,二维数组的指针作函数参数,例:/* TC8.3-5.C */有一个 3 * 3 矩阵,试编程求矩阵中最大元素的值,并将矩阵转置 分析: 设计函数 maxium 求矩阵最大元素 求最大值将矩阵从头至尾扫描,使用普通指针较为方便 设计函数 exchange 将矩阵转置 转置矩阵要逐行逐列操作,用行指针更方便,二维数组指针实例,#in

39、clude /* TC8.3-5.C */ #include int maxium( int *p, int n ) int *p_end, max = *p;p_end = p + n - 1;for( p+; p = p_end; p+ ) if ( max *p ) max = *p;return max; void exchange( int ( *p ) 3 , int n) int i, j, t;for ( i = 0;i n; i+ )for ( j = 0; j i; j+ ) t = pij; pij = pji; pji = t; ,下一页,前一页,void main(

40、) int i, j, score 3 3 ;srand (1);printf( “随机产生的数组:n“ );for( i = 0; i 3; i+ ) for ( j = 0; j 3; j+ ) score i j = 1 + rand( ) % 50; printf( “%3d“, score i j ); printf( “n“ ); printf( “最大元素为:%dn“, maxium( (int *)score, 9 ) );exchange( score, 3 );printf( “行列交换后的数组:n“ );for( i = 0; i 3; i+ ) for ( j = 0;

41、 j 3; j+ )printf( “%3d“, score i j );printf(“n“ ); ,下一页,前一页,76,8.4 指针与字符串,指针变量可以直接用来处理字符串 用指针变量处理字符串有其独特之处,77,字符串的表示形式,字符数组法: char string = “name“; 输出: printf( “%sn“, string ); 或:for ( i = 0; i 5; i+ )printf( “%c“, string i ; 地址常量法:for ( i = 0; i 5; i+ )printf( “%c“, *( string + i ) ;,指针与字符串,78,字符串的

42、表示形式,#include /* TC8.4-1.C */ void main( ) int i;char string = “name“;printf( “%sn“, string );for ( i = 0; i 5; i+ )printf( “%c“, string i );printf( “n“ );for ( i = 0; i 5; i+ )printf( “%c“, *( string + i ) );printf( “n“ ); ,指针与字符串,79,字符串的表示形式,字符指针法: char string = “name“, *p = string ; 整体输出:printf(

43、“%sn“, p ); 单字符输出:while ( *p != 0 ) printf( “%c“, *p+ ); 直接指针法: char *p = “name“; 输出: printf(“%sn“, p );,指针与字符串,80,字符串的表示实例,#include /* TC8.4-1A.C */ void main( ) int i;char string = “name“, *p = string;printf( “%sn“,p );while ( *p != 0 )printf( “%c“, *p+ );printf( “n“ ); ,指针与字符串,81,字符串的表示形式,注意: 可用指

44、针变量直接对字符串赋值 char string 20 , *p; p = “ How are you? “; string = “ How are you? “ 不能用指针输入字符串 scanf ( “%s“, string ); scanf ( “%s“, p ); ,指针与字符串,82,字符串的表示实例,例TC8.4-2.C:将字符串a复制到字符串b中 void main( ) char a20 = “I am a boy.“, b20, *p1, *p2;int i;p1 = a; p2 = b;for ( ; *p1 != 0; p1+, p2+ ) *p2 = * p1;*p2 =

45、0;printf( “strint a is: %sn“, a );printf( “strint b is: “); for ( i = 0; bi != 0; i+ )printf( “%c“, bi );printf(“n“); ,指针与字符串,83,字符串指针练习,#include /* TC8.4-4.C */ #include void main( ) char s80= “Good Morning!“;char *p = “How do you do!“;strcpy( s, p + 4 );p += 7;printf( “ %sn %sn %cn“, s, p, *p ); ,运行结果: do you do! you do! y,例:以下程序的输出结果: /* TC8.4-5.C */ #include void main( ) char c, *s = “abcde“;while ( c = *s+ )switch ( c a ) case 0:case 1: printf( “%c“, c + 4 );case 2: printf( “%cn“, c + 4 ); break;case 3: printf( “%c“, c + 3 );default: printf( “%cn“, c + 2 ); break; ,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报