C语言复习及C基础知识讲座课件_第1页
C语言复习及C基础知识讲座课件_第2页
C语言复习及C基础知识讲座课件_第3页
C语言复习及C基础知识讲座课件_第4页
C语言复习及C基础知识讲座课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言复习及C基础知识讲座第二章第二章 C语言复习及语言复习及C+基础知识基础知识C语言复习及C基础知识讲座2.1.1 C+的起源的起源2.1.2 C+的特点的特点 *.c C的源程序的源程序 以下的文件以下的文件C和和C+都可用:都可用: *.h C的头包含文件的头包含文件 *.cpp C+的源程序的源程序 *.hpp C+的头包含文件的头包含文件 /* */ C的注释的注释 / C +的注释的注释2.1 C+的起源和特点的起源和特点1C语言复习及C基础知识讲座2.2 C+源程序的构成源程序的构成2.2.1 C+程序的一般格式程序的一般格式例例2.1 说明说明C+构造的示例程序构造的示例程序

2、#include / 系统头文件系统头文件int add(int a, int b); /函数原型的说明函数原型的说明int main( ) /主函数主函数 int x,y,sum; /定义三个整型变量定义三个整型变量 cout输入二个数输入二个数:x; /从键盘输入变量从键盘输入变量x的值的值 ciny; /从键盘输入变量从键盘输入变量y的值的值 sum=add(x,y); /调用函数调用函数add,将函数返回值赋给变量将函数返回值赋给变量sum cout二数和是二数和是:sumn; /输出输出 return 0;int add(int a, int b) /定义函数定义函数add,函数函数

3、(返回返回)值为整型值为整型 int c; /定义临时变量定义临时变量c c=a+b; /求和求和 return c; /将将c的值返回的值返回,通过通过add带回调用处带回调用处2C语言复习及C基础知识讲座2.2.2 C+程序的结构特性程序的结构特性1.包含文件及头文件包含文件及头文件2.标准输入与输出标准输入与输出 printf(格式说明格式说明,表达式表列表达式表列); scanf(格式说明格式说明,地址表列地址表列); cout3.新行新行 “n” endl4.主函数主函数 void main( ) .5. 一般的函数一般的函数 函数头函数头 int add (int a, int b

4、) 函数体函数体 int c; /变量定义变量定义 c=a+b; /执行部分执行部分 return c; 3C语言复习及C基础知识讲座6.面向对象的特性面向对象的特性 类的声明部分类的声明部分 类的使用部分类的使用部分例例2.2 #include /类的声明部分类的声明部分class A int x,y,z; /类类A的数据成员声明的数据成员声明 fun( ) /类类A的成员函数声明的成员函数声明 ;/类的使用部分类的使用部分void main( ) A a; /创建一个类创建一个类A的对象的对象a . a.fun( ); /给对象给对象a发消息,调用成员函数发消息,调用成员函数fun( )C

5、语言复习及C基础知识讲座2.3 C+在非面向对象方面的一些特性在非面向对象方面的一些特性2.3.1 注释行注释行/* */ C的注释的注释 / C +的注释的注释2.3.2 新的新的I/O流流cin是标准输入流,在程序中代表标准输入设备,即键盘。是标准输入流,在程序中代表标准输入设备,即键盘。 运算符运算符“”表示向右表示向右cout是标准输出流,在程序中代表标准输出设备,即屏幕。是标准输出流,在程序中代表标准输出设备,即屏幕。 运算符运算符“”表示向左表示向左使用使用cin或或cout进行进行I/O操作时,在程序中必须嵌入头文件操作时,在程序中必须嵌入头文件iostream.h/例例2.3#

6、include int main( ) char name20; coutname; coutnameendl; return 0;/例例2.4#include void main( ) int x=25;couthexxdecxoctx=0;k-) . .以上的写法在以上的写法在C程序中都是错误的,但在程序中都是错误的,但在C+程序中都是正确的。程序中都是正确的。5C语言复习及C基础知识讲座2.3.4 结构、联合和枚举名可直接作为类型名结构、联合和枚举名可直接作为类型名定义枚举类型名:定义枚举类型名:enum bool FALSE, TRUE;定义结构枚举类型名:定义结构枚举类型名:Stru

7、ct student int sno; char *sneme;C语言中定义枚举类型变量:语言中定义枚举类型变量: enum bool done;定义结构类型变量:定义结构类型变量: struct student s1, s2;C+语言中定义枚举类型变量:语言中定义枚举类型变量: bool done;定义结构类型变量:定义结构类型变量: student s1, s2;6C语言复习及C基础知识讲座2.3.5 const修饰符修饰符#define LIMIT 100这里这里 LIMIT 是一个标志,代表是一个标志,代表 100const int LIMIT=100;这里这里 LIMIT 是一个常量

8、名,在内存有空间放了是一个常量名,在内存有空间放了100,因此有地址,因此有地址,可以用指针指向这空间,但不能修改它。可以用指针指向这空间,但不能修改它。int i=100;这里这里 i 是一个变量名,在内存有空间放了是一个变量名,在内存有空间放了100,因此有地址,可以用,因此有地址,可以用指针指向这空间,且可以改放别的整数。指针指向这空间,且可以改放别的整数。(1) 可以用一个指向常量的指针变量指向常量:可以用一个指向常量的指针变量指向常量: const char *name=“chen”; name3=a; /错误错误 name=“zhang”;/正确正确(2)指针常量指针常量 char

9、 *const name=“chen”; name3=a; /正确正确 name=“zhang”; /错误错误(3) const char *const name =“chen”;namechen常量常量zhang常量常量nXanamechenzhang常量常量an aX7C语言复习及C基础知识讲座/例例2.5#include main( ) int a=1; #define T1 a+a #define T2 T1-T1 coutT2 is T2endl; return 0; cout“T2 is “a+a-a+aendl;/例例2.6#include main( ) int a=1; co

10、nst T1=a+a; const T2=T1-T1; coutT2 is T2endl; return 0;T2a+aa+aT1-T18C语言复习及C基础知识讲座2.3.6 内置函数内置函数/例例2.7#include int main( ) 3次次 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; return 0;在函数前加以在函数前加以 inline ,成为内置函数成为内置函数#include int main( ) 代码嵌入代码嵌入 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; retur

11、n 0;float circle(float r) return 3.1416*r*r; inline float circle(float r) return 3.1416*r*r; 9C语言复习及C基础知识讲座/例例2.8#include #define doub(x) x*2int main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;/例例2.9#include inline int doub(int x) return x*2; int

12、main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;10C语言复习及C基础知识讲座2.3.7 函数原型函数原型返回类型返回类型 函数名(参数表)函数名(参数表);/例例2.10#include void write(char *s); /函数原型或叫函数声明函数原型或叫函数声明 void main( ) write(Hello, world!); void write(char *s)无分号无分号 coutsendl; 使用在前,定义在后,要先声

13、明。使用在前,定义在后,要先声明。若定义在前,使用在后,就可不必声明。若定义在前,使用在后,就可不必声明。说明说明: (1) - (8)11C语言复习及C基础知识讲座2.3.8 带有缺省参数的函数带有缺省参数的函数C+在说明函数原型时,可以为一个或多个参数指定缺省参数值,在说明函数原型时,可以为一个或多个参数指定缺省参数值,以后调用此函数时,若省略其中某一实参,以后调用此函数时,若省略其中某一实参,C+自动以缺省值作为自动以缺省值作为相应參数的值。相应參数的值。int special(int x=5, float y=5.3);合法的调用;合法的调用;special();special(25)

14、;special(100,79.8);说明说明:(1)所有取缺省值参数都必须出现在不取缺省值参数的右边。所有取缺省值参数都必须出现在不取缺省值参数的右边。 int fun(int i,int j=5, int k) 是错误的是错误的 int fun(int i, int k,int j=5) 是正确的是正确的(2)调用时,若某个参数省略,则其后的参数皆应省略。调用时,若某个参数省略,则其后的参数皆应省略。不合法的调用;不合法的调用;special(,21.5);12C语言复习及C基础知识讲座2.3.9 函数重载函数重载C+中,只要函数的參数的类型不同,或者參数个数不同,或者二中,只要函数的參数

15、的类型不同,或者參数个数不同,或者二兼有之,几个函数可以用相同的函数名。称为函数重载兼有之,几个函数可以用相同的函数名。称为函数重载/*例例2.11#include int square(int i) return i*i; float square(float f) return f*f; double square(double d) return d*d; void main( ) int i=12; float f=3.4; double d=5.67; couti*i=square(i)endl; coutf*f=square(f)endl; coutd*d=square(d)end

16、l;13C语言复习及C基础知识讲座/*例例2.12#include int mul(int x, int y) return x*y; int mul(int x, int y, int z) return x*y*z; void main( ) int a=3,b=4,c=5; couta*b=mul(a,b)endl; couta*b*c=mul(a,b,c)endl; 说明:说明:(1)重载函数应在参数个数或参数类型上有所不同,编译才能识别调重载函数应在参数个数或参数类型上有所不同,编译才能识别调用哪一个重载版本,即使返回类型不同也不行。用哪一个重载版本,即使返回类型不同也不行。如:如:

17、int mul(int x, int y) ;和和 double mul(int x, int y); 是不能重载的。是不能重载的。(2)一般而言,重载函数应对不同的参数情况执行相同的功能。一般而言,重载函数应对不同的参数情况执行相同的功能。如:如:abs(int x); 和和 abs(float x);都是求绝对值,一个是整数的绝对值都是求绝对值,一个是整数的绝对值,一个是实数的。,一个是实数的。14C语言复习及C基础知识讲座(3) 函数的重载与带默认值的函数一起使用时,有可能引起二义性函数的重载与带默认值的函数一起使用时,有可能引起二义性如:如: void Drawcircle(int r

18、=0; int x=0; int y=0); void Drawcircle(int r);当调用:当调用: Drawcircle(20); 编译程序无法确定用哪一个函数。编译程序无法确定用哪一个函数。(4) 在函数调用时,当实参与形参类型不相符,在函数调用时,当实参与形参类型不相符,C+会自动做类型转会自动做类型转换,但有时也可能产生错误:换,但有时也可能产生错误: void f_a(int x); void f_a(long x); int c=f_a(5.56); ?C语言复习及C基础知识讲座2.3.10 作用域运算符作用域运算符:当全局变量和局部变量同名时,函数中不能使用全局变量。当全

19、局变量和局部变量同名时,函数中不能使用全局变量。/*例例2.13#include int avar=10; /全局变量全局变量void main( ) int avar=25; /局部变量局部变量 coutavar is avarendl; 局部变量局部变量可用作用域运算符可用作用域运算符 : /*例例2.13#include int avar;void main( ) int avar; avar=25; /局部变量局部变量avar :avar=10; /全局变量全局变量avar coutlocal avar = avarendl; coutglobal avar = :avarendl;1

20、5C语言复习及C基础知识讲座2.3.11 无名联合无名联合C语言的共用体:语言的共用体:union data int i; char ch; float f;union data a,b,c;引用:引用:a.i a.ch a.f 等等C+的无名联合:的无名联合:union int i; char ch; float f; 直接可用直接可用 i ch f 等等16a4字字节节ichfC语言复习及C基础知识讲座2.3.12 强制类型转换强制类型转换C语言的强制类型转换:语言的强制类型转换:int i=10;float x=(float)i;C+的强制类型转换:的强制类型转换:int i=10;fl

21、oat x=float(i);float y=(float)i;两种方法两种方法C+都可以。都可以。17C语言复习及C基础知识讲座2.3.13 new和和delete C语言用函数语言用函数malloc()和和free()动态分配内存和释放动态分配的动态分配内存和释放动态分配的内存。内存。C+使用运算符使用运算符new和和delete能更好、更简单地进行内存的分能更好、更简单地进行内存的分配和释放。配和释放。 如如C语言中用:语言中用: int *p; p=(int *) malloc ( sizeof(int) ); *p=10; 而而C+语言中语言中 /*2.14#include void

22、 main( ) int *p; /定义一个整型指针变量定义一个整型指针变量p p=new int; /动态分配一个整型存储区动态分配一个整型存储区,并把首地址赋给并把首地址赋给p *p=10; cout*pendl; delete p; /释放释放p指的空间指的空间,撤消指针撤消指针pnew 和和 delete 的优点:的优点:(1)new可以自动计算所要分配内存的类型的大小,而不必用可以自动计算所要分配内存的类型的大小,而不必用sizeof来来计算。计算。p18C语言复习及C基础知识讲座(2)new能够自动返回正确的指针类型,而不必进行类型转换。能够自动返回正确的指针类型,而不必进行类型转

23、换。(3)可以用可以用new将分配的对象初始化。将分配的对象初始化。(4)new 和和 delete 都可以被重载,允许建立自定义的分配系统。都可以被重载,允许建立自定义的分配系统。说明:说明:(1)使用使用new可以为数组动态分配内存空间(但不能赋初值)。可以为数组动态分配内存空间(但不能赋初值)。 int *pi=new int10; int *pi=new int234;(2)new可在为简单变量分配内存空间的同时,进行初始化。可在为简单变量分配内存空间的同时,进行初始化。/*例例2.16#include void main( ) int *p; p=new int(99); /动态分配

24、内存动态分配内存,并将并将99作为初始值赋给它作为初始值赋给它 cout*pendl; delete p;(3)释放动态分配的数组存储区:释放动态分配的数组存储区: delete p;19C语言复习及C基础知识讲座(4)使用动态分配内存时,分配失败,将返回空指针(使用动态分配内存时,分配失败,将返回空指针(NULL)。)。因此通常要对内存的动态分配是否成功进行检查。因此通常要对内存的动态分配是否成功进行检查。 分配内存失败,分配内存失败,p=NULL/*例例2.17#include void main( ) int *p; p=new int; if(!p) /若分配内存失败若分配内存失败 c

25、outallocation failuren; return ; *p=20; cout*pendl; delete p;(5) 用用new分配的空间,使用结束后应用分配的空间,使用结束后应用delete显式地释放。显式地释放。p NULL20C语言复习及C基础知识讲座2.3.14 引用引用引用可为变量起别名,主要有变量的引用、函数參数的引用、函数引用可为变量起别名,主要有变量的引用、函数參数的引用、函数返回值的引用。返回值的引用。1.引用变量引用变量 数据类型数据类型 &别名别名=已定义的变量名;已定义的变量名;/*例例2.18#include void main( ) int i;

26、 int &j=i; / i 又叫又叫 j i i=30; j couti=ij=jn; j=80; couti=ij=jn; cout“Address of i ”&i“n”; /显示显示 i 的地址的地址 coutAddress of j &jn;(1)定义引用时,必须立即对它进行初始化,不能以后再赋值。定义引用时,必须立即对它进行初始化,不能以后再赋值。 int i; int &j; /错误错误 j=i;21C语言复习及C基础知识讲座(2) 引用实际上是一种隐式指针,可以少用引用实际上是一种隐式指针,可以少用 “*” 号号 /*例例2.19 #includ

27、e void main( ) int i=15; /整型变量整型变量i int *iptr=&i; /iptr指向指向i int &rptr=i; /rptr引用引用i couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl; i=29; cout After changing i to 29endl; couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl;i is 15 i is 29*iptr is 15 *iptr is 29rptr is

28、 15 rptr is 29iptrirptr22C语言复习及C基础知识讲座(3)引用不可重新赋值,不可使其作为另一个变量的别名。引用不可重新赋值,不可使其作为另一个变量的别名。int i, k;int &j=i;j=&k; /错误错误(4)并不是任何类型的数据都可引:并不是任何类型的数据都可引:int &a10; /不能建立引用数组不能建立引用数组int &*p; /不能建立指向引用的指针不能建立指向引用的指针int &r; /不能建立引用的引用不能建立引用的引用(5)当使用取地址运算符时当使用取地址运算符时&,取的是被引用变量的地址。,取的是

29、被引用变量的地址。int num=50;int &ref=num;int *p=&ref;则则p中保存的是变量中保存的是变量num的地址。的地址。(6) 引用符虽然与地址符一样,但不会引起二义性。引用符虽然与地址符一样,但不会引起二义性。2. 引用作为函数參数引用作为函数參数引用參数的方法可以代替引用參数的方法可以代替C语言中的指针地址调用的方式。语言中的指针地址调用的方式。23C语言复习及C基础知识讲座/*例例2.20 C语言中的指针地址调用的方式语言中的指针地址调用的方式#include void s *m, int *n) int temp; temp=*m; *m=*n

30、; *n=temp;void main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl;a=5 b=10a=10 b=524m &aatemn &bbC语言复习及C基础知识讲座/*例例2.21 引用參数的方法引用參数的方法#include void s &m, int &n) int temp; temp=m; m=n; n=temp;main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl; return 0;a=5 b=10a=10 b=5

31、25 matem nbC语言复习及C基础知识讲座3. 引用返回值引用返回值函数可返回一个引用,其目的是可将函数用在赋值运算符的左边。函数可返回一个引用,其目的是可将函数用在赋值运算符的左边。/*例例2.22#include int a=1,3,5,7,9;int &index(int); /声明返回引用的函数声明返回引用的函数void main( ) index(2)=25; /将将a2重新赋值为重新赋值为25 coutindex(2)endl;int &index(int i) return ai; 26C语言复习及C基础知识讲座4. 引用举例引用举例例例2.23 /引用参数

32、和引用返回值引用参数和引用返回值#include int &max(int &num1, int &num2);int &min(int &num1, int &num2);main( ) int num1, num2; coutnum1; coutnum2; max(num1,num2)=0; coutn把大的数置成把大的数置成 0 后后, 这两个数是这两个数是:; coutnnum1 和和 num2n; coutn再一次输入二个数再一次输入二个数:n; coutnum1; coutnum2;27C语言复习及C基础知识讲座 min(num1,n

33、um2)=0; coutn把小的数置成把小的数置成 0 后后, 这两个数是这两个数是:; coutnnum1 和和 num2num2)?num1:num2; int &min(int &num1, int &num2) /两数中找小数两数中找小数 return (num1num2)?num1:num2; 运行结果:运行结果:输入第一个数输入第一个数: 45输入第二个数输入第二个数: 78把大的数置成把大的数置成 0 后后, 这两个数是这两个数是: 45 和和 0 再一次输入二个数再一次输入二个数:输入第一个数输入第一个数: 13输入第二个数输入第二个数: 56把小的数置

34、成把小的数置成 0 后后, 这两个数是这两个数是:0 和和 5628C语言复习及C基础知识讲座 2.3.15 void 指针指针void 型指针是一通用型指针,可指任何类型:型指针是一通用型指针,可指任何类型:void pa; /错误,不能声明错误,不能声明void类型的变量类型的变量void *pa; /正确,可以声明正确,可以声明void类型的指针类型的指针 int i=456; char c=a; pc=&i; pc=&c;例例2.24#include void main() void *pc; int i=456; char c=a; pc=&i; cout*(

35、int*)pcendl; pc=&c; cout*(char*)pcendl;C语言复习及C基础知识讲座以下部分是以下部分是C语言复习参考语言复习参考2.4 存储类存储类存储类存储类 类型修饰符类型修饰符 类型类型 变量名表列变量名表列;存储类存储类 auto static extern register 类型修饰符类型修饰符 const volatile2.4.1 自动变量和寄存器变量自动变量和寄存器变量2.4.2 静态变量静态变量2.4.3 外部变量外部变量29C语言复习及C基础知识讲座2.5 基本运算符和表达式基本运算符和表达式2.5.1 关系运算符关系运算符2.5.2 算术运算

36、符算术运算符2.5.3 逻辑运算符逻辑运算符2.5.4 位运算符位运算符2.5.5 条件运算符条件运算符2.5.6 逗号表达式逗号表达式2.5.7sizeof运算符运算符2.6赋值及运算顺序赋值及运算顺序2.7 类型转换类型转换30C语言复习及C基础知识讲座2.8 语句语句2.8.1 表达式语句、空语句和块语句表达式语句、空语句和块语句2.8.2 选择语句选择语句 1. if 语句语句 2. switch 语句语句2.8.3 循环循环 1. while 语句语句 2. do while 语句语句 3. for 语句语句2.8.4 转移转移 1. break 与与 continue 语句语句 2

37、. goto 语句语句2.8.5 return 语句语句31C语言复习及C基础知识讲座2.9 函数函数2.9.1 函数的基础知识函数的基础知识 函数先声明再调用后定义的例子函数先声明再调用后定义的例子 #include void main( ) int a,b,c; int sum(int, int); /先申明先申明sum()函数函数 a=25; b=36; c=sum(a,b); /调用调用sum()函数函数 cout c endl; int sum(int x, int y) /定义定义sum()函数函数 int temp; temp=x+y; return temp; 32C语言复习及

38、C基础知识讲座/习题习题 函数函数(7.1)#include void main() int m,n,l,s; int maxj(int a, int b); int minb(int a, int b); printf(输入个正整数输入个正整数:); scanf(%d,%d,&m,&n); if (m0 & n0) l=maxj(m,n); s=minb(m,n); printf(%d和和%d的最大公约数为的最大公约数为%dn,m,n,l); printf(%d和和%d的最小公倍数为的最小公倍数为%dn,m,n,s); else printf(输入了负数输入了负数!n

39、); return;int maxj(int a, int b) int r,t; if(ab) t=a;a=b;b=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; return b;int minb(int a, int b) int r; r=maxj(a,b); if (r!=0) return a*b/r; else return 0;sln78m 56trb78a56rb78a5633C语言复习及C基础知识讲座/习题习题 函数函数(7.5)#include #include #include void main() char a255; void con

40、vert(char b); printf(请输入一个字符串请输入一个字符串: n); gets(a); convert(a); printf(该字符串反序为该字符串反序为: n); puts(a); return;void convert(char b) int l,i; char c; l=strlen(b); for(i=0; i=l/2 ;i+) c=bi; bi=bl-i-1; bl-i-1=c; return ;caba1a0b1b0acbdefa254034C语言复习及C基础知识讲座m#include #include void main() float a,b,c,d,x2; v

41、oid root0(float a, float b, float c, float d,float x); void root1(float a, float b, float c,float x); void root2(float a, float b, float c, float d, float x); printf(请输入一元二次方程的三个系数请输入一元二次方程的三个系数 a,b,c:n); scanf(%f,%f,%f,&a,&b,&c); if(a=1e-6) printf(不是一元二次方程不是一元二次方程!n); else printf(方程方程 (

42、%4.1f)x*x+(%4.1f)x+(%4.1f)=0n,a,b,c); d=b*b-4*a*c; if (d0) root0(a,b,c,d,x); printf(由于由于b*b-4*a*c0 因此有二个实根因此有二个实根:n); printf(x1 = %f n,x1); printf(x2 = %f n,x2); return;36C语言复习及C基础知识讲座2.9.2 参数传递及函数返回值参数传递及函数返回值 (1) 值传值传 一般变量一般变量 (2) 传地址传地址 结构结构, 数组数组 (3) 传引用传引用 一般变量一般变量, 结构结构, 数组数组 缺省参数缺省参数2.9.3 使用使

43、用C+系统函数系统函数37C语言复习及C基础知识讲座2.10 数组数组定义定义 类型类型 数组名数组名大小大小; int a4; int b34; int c234;使用时数组元素使用时数组元素 数组名数组名表达式表达式 a0=10; i=3; ai=5; b03=20; 初始值初始值 定义时定义时 int a=2,4,6,8,10; int b3=2,4,6,8,10,12;38C语言复习及C基础知识讲座2.11 指针指针定义定义 类型类型 *指针变量名指针变量名;2.11.1 使用指针使用指针 取地址运算符取地址运算符 & 取内容运算符取内容运算符 * 位移取值位移取值 #incl

44、ude void main( ) int a10=2,4,6,8,10; for(int *p=a;pa+10;p+) cout p+0 endl; 这里这里 p+0 位移位移+0 ,等价于,等价于 *p p=a; p+2 即即 *(p+2) p-i 即即 *(p-i)39C语言复习及C基础知识讲座2.11.2 指针运算指针运算1. 赋值赋值 int x,*px,*q; px=&x; q=px; 表示表示 q 和和 px 同指一个地方同指一个地方(q跟着跟着px指指)2. 比较比较 px= =q q!=px 判断判断 q 和和 px 是否同指一个地方是否同指一个地方 p q 判断判断

45、p 和和 q 指在数组元素的前后指在数组元素的前后3. 移动指针移动指针 p=p+3; + - 运算运算 y=*px+; /y=*(px+); y=*+px; /y=*(+px); y=+*px; /y=+(*px); y=(*px)+; 40C语言复习及C基础知识讲座2.11.3 指针和数组指针和数组1. 指向一维数组的指针指向一维数组的指针 int a4, *p; p=a; 或或 p=&a0; 即即 p 指向指向 a0; 2. 指针数组指针数组 许多个指针变量在一起都可用来指向整数许多个指针变量在一起都可用来指向整数 int *pa2; char *pc57; 例例#include

46、 void main( ) int a23=2,4,6,8,10,12; int *pa2; /有二个指针有二个指针 pa0 和和 pa1 pa0=a0; pa1=a1; for (int i=0; i2; i+) for(int j=0; j3; j+,pai+) cout aij=” *paiendl; 41C语言复习及C基础知识讲座3. 指向整个数组的指针指向整个数组的指针(行指针行指针) 如:如:int (*a)5; int b25=0,1,2,3,4,5,6,7,8,9 a=b; a b 0 1 2 3 4 5 6 7 8 9 #include void main( ) int (*

47、a)5; int b25=0,1,2,3,4,5,6,7,8,9; a=b; for(int i=0;i5;i+) cout i : *(*a+i)endl; a+; for(int i=0;i5;i+) cout i : *(*a+i)endl; 42C语言复习及C基础知识讲座一维数组的地址 int a4; a+0 是第是第 0 列的地址列的地址 a+i 是第是第 i 列的地址列的地址 *( a+0) 是第是第 0 列的列的数据数据 * *( (a+i) 是第是第 i 列的列的数据数据地址 a 数据 *a &a0 a0一维数组的指针 int a4, *p; p=a; 可以可以p+p+

48、指针p 数据 *p a043C语言复习及C基础知识讲座二维数组的地址 * *a a0a a0 int a34; *(a+i)+j是第 i 行第 j 列地址 * *( (* *(a+i)+j) a+0 是第是第 0 行的地址行的地址 . a+i 是第是第 i 行的地址行的地址 * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0

49、列的列的数据数据.(.(* *(a+0)+j) 是第是第0行第行第j列的列的数据数据 * *( (* *( (a+i)+0)是第是第i行第行第0列的列的数据数据.* *( (* *(a+i)+j) 是第是第i行第行第j列的列的数据数据行地址 a+0 列地址 *(a+0)行地址 a+i 44C语言复习及C基础知识讲座二维数组的指针 * *a a0a a0 int a34; (p+i*4+j)是第i行第j列地址 (1)(1) int *p;(小指针) p=p=* *a;a; p=a; p=a; p=a0; p=a0; *(p+i*4+j) p=&a00; p=&a00; 元素地址元

50、素地址: p=p=* *a+j;a+j; p+jp+j p+;p+; 元素数据元素数据: * *p p * *(p+j) pj(p+j) pj * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0列的列的数据数据.(.(* *(a+0)+j) 是第是第0行第行第j列的列的数据数据 * *( (* *( (a+i)+0)是第是第

51、i行第行第0列的列的数据数据.* *( (* *(a+i)+j) 是第是第i行第行第j列的列的数据数据 p 当一维数组名用但可当一维数组名用但可 p=p+i p+ 走走 (i)一行一行 元素地址元素地址: * *p+jp+j 数据数据: * *( (* *p+j) (p+j) (* *p)jp)j列地址 *(a+0)45C语言复习及C基础知识讲座struct student struct student int num; int num; float score; float score; struct student struct student * *nextnext;struct stu

52、dent struct student * *p; p; nextnumscore结点结点#include #include 申请空间函数:申请空间函数:malloc(malloc(字节数字节数) )测试字节运算符:测试字节运算符:sizeof(sizeof(类型类型) )p=(struct student p=(struct student * * )malloc(sizeof(struct student) )malloc(sizeof(struct student);释放空间函数:释放空间函数:free(free(指针);指针); free( p );free( p );nextnums

53、core结点结点p46C语言复习及C基础知识讲座p1=p2=(struct student p1=p2=(struct student * * )malloc(LEN) )malloc(LEN);scanf(“%d,%f”,&p1-num,&p1-score)scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore结点结点p1p p2 220101 89.5headNULLn= 0n= 0 1 1head=p1;headnextnumscorep1p1=(struct student p1=(struct student * *

54、 )malloc(LEN) )malloc(LEN);201032010390902(n=2) p2-next=p1;(n=2) p2-next=p1;p2=p1p2=p1; p p2 2scanf(“%d,%f”,&p1-num,&p1-score);scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore p p1 10 0NULLNULLp1-num=0p1-num=047C语言复习及C基础知识讲座p pp p0103070811NULLNULLheadheadp p1 1p p2 2p1p20103070811NULLN

55、ULLheadheadp p0 005p p1 1p p01030811headheadNULLp p1 1p2p248C语言复习及C基础知识讲座2.11.4 引用引用 引用可为变量起别名,它主要用作函数参数以及函数的返回类引用可为变量起别名,它主要用作函数参数以及函数的返回类型。有参数引用和返回值引用。型。有参数引用和返回值引用。 1. 引用说明引用说明 int num=50; int& ref=num; 表示放整数表示放整数 50 的内存空间的内存空间 可叫可叫 num,又可叫,又可叫 ref 引用实质上是为另一个变量建立别名。引用实质上是为另一个变量建立别名。 2. 引用参数引用

56、参数(传引用传引用) 49C语言复习及C基础知识讲座3. 返回引用的函数返回引用的函数当一个函数的返回值需重新赋值的时候,我们也可对当一个函数的返回值需重新赋值的时候,我们也可对返回值进行引用,这时函数可出现在赋值号的左边。返回值进行引用,这时函数可出现在赋值号的左边。这种函数称为返回引用的函数。这种函数称为返回引用的函数。 形式形式 类型类型& 函数名函数名(参数参数)#include int a=2,4,6,8,10,12; int& index(int i); void main( ) index(3)=16; /index(3) 即返回值即返回值ai,i=3,a3改为改

57、为16 coutindex(3)endl; cout a3endl; int& index(int i) return ai; 注意注意: 返回值是函数内的局部变量时不能引用返回值是函数内的局部变量时不能引用 50C语言复习及C基础知识讲座例例#include int e(int i) return i+1; int &f() int i=1; return +i;int g(int &i) i=i+1; return i;main() int r1=e(3); int &r2=e(4); int r3=f(); int &r4=f(); int a=0,b=0,c=0,d; d=g(4); a+=g(g(c); b+=g(e(3); return 1;51C语言复习及C基础知识讲座2.11.5 void类型指针类型指针 void指针是一个特殊指针,它可以指向任一类型的指针是一个特殊指针,它可以指向任一类型的C+对象。对象。 void main() void *vp; int i=5; floatf=7.8; char c=A; int *ip; float *fp; char *cp; ip=&i; vp=&i; cp=&c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论