08第八章指针.ppt
文本预览下载声明
第八章 指针 本章要点 在变量、内存单元和地址之间是什么关系? 如何定义指针变量,怎样才能使用指针变量? 什么是指针变量的初始化? 指针变量的基本运算有哪些?如何使用指针改变变量的值? 指针作为函数参数的作用是什么? 如何通过指针实现函数调用返回多个值? 如何利用指针实现内存的动态分配? 8.1 寻找保险箱密码——指针变量的定义 8.2 角色互换——指针作为函数的参数 8.3 冒泡排序——指针和数组 8.4 加密变换问题——指针和字符串 void strcpy(char to[ ], char from[ ]) { int i = 0; while (to[i] = from[i]) i++; } int strcmp(char s[ ], char t[ ]) { int i; for( i = 0; s[i] != \0; i++) if(s[i] != t[i]) break; return s[i] - t[i]; } int strlen(char str[ ]) { int i = 0; while(str[i] != \0’) i++; return i; } 8.5 任意个整数求和问题 * ? 以下程序运行后, 输出结果是 ss ( char *s ) { char *p=s; while ( *p ) p++; return (p-s); } main( ) { char *a=“ abded ”; int i; i=ss ( a ); printf ( “ %d ”, i ); } A) 8 B) 7 C) 6 D) 5 *p为 0 时(‘\0’),循环结束 此时 p=a[5] 此时 s=a[0] 阅读函数 f1,然后在函数 f2 中填入正确的内容,使函数 f1 和函数 f2 有相同的功能。 char *f1(char s[ ], char t[ ]) { int k; for (k=0; t[k]!=\0; k++) s[k]=t[k]; /* 把 t 数组复制到 s 数组 */ s[k]=\0; return s; /* 返回 s 数组的首地址 */ } char *f2(char *s, char *t) { ; while (( = *t++) != \0) ; return ; } char *ss=s *s++ ss 例如: 先输入一个正整数n,再输入任意n个整数,计算并输出这n个整数的和。 需要使用动态内存分配方法为这n个整数分配空间 数组名作函数参数时,实参数组向形参数组传递的是数组的首地址,因此形参数组中的元素的值发生变化后,返回调用函数时,实参数组的相应元素的值也发生变化 (因为实参数组和形参数组共享同一段内存) 数组名是指针常量,相当于指针作为函数的参数 数组名做为实参,形参是指针变量(数组) 1. 形参和实参都用数组名, 2. 实参用数组名,形参用指针变量, 3. 实参和形参都用指针变量, 4. 实参用指针变量,形参用数组名, 由于实参和形参是地址传递,因此函数的实参和形参的对应关系有: 注意: 指针变量作实参时, 必须指针变量有确定值, 指向一个已定义的数组 int sum ( int *array, int n ) { int i, s = 0; for(i=0; in; i++) s += array[i]; return(s); } *(array+i) int array[ ] void main( ) { int i; int b[5] = {1, 4, 5, 7, 9}; printf(%d\n, sum(b, 5)); } void main( ) { int i, *p; int b[5] = {1, 4, 5, 7, 9}; p=b; printf(%d\n, sum(p, 5)); } int sum ( int *array, int n ) { int i, s = 0
显示全部