子函数NS图前写完整函数头,调用处写具体调用语句 注意参数个数,尽量少用全局变量,使用全局变量要声 明全局变量与局部变量通常不重复定义,参数不能重复 定htp(intn,oatx) if(n==0)p(n,x)=1 else if (n==1)p(n, x)=x; else p(n, x=p(n-1, x)+p(n-2, X)*x; return(p(n, x)); }八赋值号左边只能是变量,变量名规则要注意 exchange(a0], a[lD-->exchang(int i, int Dintt tmp; tmp=i; i=j;j=tmpl excange(a)---> excange(int bifloat tmp; tmp=b o; b1=tmp gauss( aIcolnum){…↓/ COLNUM必须是 常量,多维数组名作参数只第一维长度可省略*
子函数N-S图前写完整函数头,调用处写具体调用语句 注意参数个数,尽量少用全局变量,使用全局变量要声 明全局变量与局部变量通常不重复定义,参数不能重复 定义! gauss( a[][COLNUM] ) { …… }/*COLNUM必须是 常量,多维数组名作参数只第一维长度可省略*/ float p(int n,float x) { if(n==0) p(n,x)=1; else if (n==1) p(n,x)=x; else p(n,x)=p(n-1,x)+p(n-2,x)*x; return(p(n,x) ); }/*赋值号左边只能是变量,变量名规则要注意*/ exchange(a[0],a[1])--->exchang(int i,int j){intt tmp;tmp=i;i=j;j=tmp} excange(a) ---> excange(int b[]){float tmp;tmp=b[0];b[1]=tmp;}
清华大学出版社 TSINGHUA UNIVERSITY PRESS 第十章 指升
第十章
清华大学出版社 TSINGHUA UNIVERSITY PRESS 本章重点 01地址、指针、变量的地址和指钍及指针变量 102指针变量的定义、引用及指针变量作参数 103(1-3)数组与指钍 10.4字符串与指钍 10.8指针运算小结
本章重点: 10.1 地址、指针、变量的地址和指针及指针变量 10.2 指针变量的定义、引用及指针变量作参数 10.3(1--3) 数组与指针 10.4 字符串与指针 10. 8 指针运算小结
§10.1地址指针变量的地址或指针指针变量 内存区的每一个字节有一个编号,该编号就内存单元 的地址,又称指针。若在程序中定义一个变量,在编 译时会给其分配若干内存单元,其中第一个存储单元 的编号称为该变量的地址,又称为该变量的指针 int i; short j, k 通过变量地址存取其 scanf(d%d7,8j,&k)值的方式称“直接访 = j+k; printf( %od,, k) 问”方式将变量的地 short x p 址存放在另一变量p中 p=&j; scanf(%od,p) 通过p访问变量的方式 &k; scanf(%,p) 称为间接访问方式
§10.1地址 指针 变量的地址或指针 指针变量 内存区的每一个字节有一个编号,该编号就内存单元 的地址 ,又称指针。若在程序中定义一个变量,在编 译时会给其分配若干内存单元,其中第一个存储单元 的编号称为该变量的地址,又称为该变量的指针 int i; short j,k; scanf(“%d %d”,&j,&k) i=j+k; printf(“%d”,k); 通过变量地址存取其 值的方式称“直接访 问”方式,将变量的地 址存放在另一变量p中, 通过p访问变量的方式 称为间接访问方式 short *p p=&j;scanf(“%d”,p) p=&k;scanf(“%d”,p)
清华大学出版社 引:专门设置一种变量,用来存放地址,称之为指针类型 的变量,简称指针变量 (1)利用指针变量向指向的内存单元输入值时应将值 放到从起始地址开始的几个字节中? short; p=&j; scanf(%d, &j) short *p; scanf(%od,p) 答:定义指针变量时已指明它所指向的内存单元中 存储的数据类型,称之为指针变量的基类型,由此决定 (2)如何输出指针变量指向的内存单元的值? printf( %od,, j) printf(%d, p) 答:使用指针运算符表示取所指向存储单元的内容 思考:输出时如何知道输出几个存储单元中的数据?
引:专门设置一种变量, 用来存放地址,称之为指针类型 的变量,简称指针变量 (1)利用指针变量向指向的内存单元输入值时应将值 放到从起始地址开始的几个字节中? short j; p=&j; scanf(“%d”,&j); short *p;scanf(“%d”,p) 答:定义指针变量时已指明它所指向的内存单元中 存储的数据类型,称之为指针变量的基类型,由此决定 (2)如何输出指针变量指向的内存单元的值? printf(“%d”,j); printf(“%d”,*p); 答:使用指针运算符*表示取所指向存储单元的内容 思考: 输出时如何知道输出几个存储单元中的数据?
810.2指针变量一定义与赋值 基类型指针变量名; 161: float *p; float a; p=&a; scanf(%f,p): printf(*p) (1)指针运算符“*”在变量定义时和参与运算时意义不 (2)在定义指针变量时必须指定基类型 注意:只能将变量的地址赋给一个指针变量,而不能将 个常数赋给一个指针变量,两者类型不同,零除外(代 表NULL)!且变量的类型和指针的基类型要一致! float a; int pointer I pOinter1=2001;/错*/ pointer1=&a;/错*/
§10.2 指针变量 基类型 *指针变量名; §10.2 指针变量----定义与赋值 例: float * p; float a; p=&a; scanf(“%f”,p);printf(*p); (1)指针运算符“*”在变量定义时和参与运算时意义不 同 (2) 在定义指针变量时必须指定基类型 注意:只能将变量的地址赋给一个指针变量,而不能将一 个常数赋给一个指针变量,两者类型不同,零除外(代 表NULL)!且变量的类型和指针的基类型要一致! float a; int * pointer_1; pointer_1=2001;/*错*/ pointer_1=&a; /*错*/
大学出 10.2.2指针变量的引用 GHUA UNIVERSITY PRESS 例10.1通过指针变量访问整型变量 #include void main() int a, b; int *pointer 1, pointer 2; a=100;b=10; pointer 1=&a pointer 2=&b; printf(%od, %dn, a, b) printf( %/od, %dn,,pointer l,*pointer 2)
10.2.2 指针变量的引用 例10.1 通过指针变量访问整型变量 #include void main ( ) { int a,b; int *pointer_1, *pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf(“%d,%d\n”,a,b); printf(“%d,%d\n”,*pointer_1, *pointer_2); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运算符“&”和“*”:(优先级同,自右向左) int a int*pointer; pointer 1=& a; (1)&* pointer1的含义是什么? 与&a相同 (2)*&a的含义是什么? 与a等价。 (3)(* pointer1)+与* pointer1++区别如何? 前者a++;后者得到的是a的值,且 pointer_1最后指向 单元a的“下一个”单元,实际移动了 sizeof(int)个字
运算符“&”和“*”: (优先级同,自右向左): int a;int *pointer; pointer_1=&a; (1)&* pointer_1的含义是什么? 与&a相同 (2) *&a的含义是什么? 与a等价。 (3) (*pointer_1)++与*pointer_1++区别如何? 前者a++;后者得到的是a的值,且pointer_1最后指向 单元a 的“下一个” 单元,实际移动了sizeof(int)个字 节
例10.2输入a和b两个整数,考虑如下输出 # nclude <stdio void main {int*p1,*p2,* scanf ("% d, % d",&a,&b) p1=&a;p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} printf ("a=%d, b=%d\n",a, b); printf ("max%d, min=%d\n"* p1, *p2)
例10 . 2 输入a和b两个整数,考虑如下输出 #include void main() { int *p1, *p2, *p,a,b; scanf(″%d,%d″,&a,&b); p1=&a;p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} printf(″a=%d,b=%d\n″,a,b); printf(″max=%d,min=%d\n″,*p1,*p2); }
10.2,3指针变量作为函数参数 例10.3通过函数实现两数互换排序 #include void main O void swap(int *pl, int*p2) f void swap(int*p1, int*p 2); I int *temp int a, b x temp=*p 1; int pointer, *pointer 2 p scanf( %od, %od, &a, &b) p 2=*temp; pointer=&a; pointer2=&b; if(a<b)swap(pointerl, pointer 2); printf( %od9d”,ab); /*temp使用前未赋初值, 可能指向一个非法单元*
10.2.3 指针变量作为函数参数 例10 . 3 通过函数实现两数互换排序 #include void main() {void swap(int *p1,int *p2); int a,b; int *pointer1,*pointer2; scanf(“%d,%d” ,&a,&b) pointer1=&a; pointer2=&b; if(a<b)swap(pointer1, pointer2) ; printf(“%d,%d” ,a,b); } void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2= temp; } /*temp使用前未赋初值, 可能指向一个非法单元*/ * * *