文档详情

C语言第章 指针.ppt

发布:2017-08-05约9.58千字共67页下载文档
文本预览下载声明
第八章 指针变量的定义 用一个变量存放另一变量的地址(即指针),则它称为“指针变量”。 例如:指针声明: int *p; #include stdio.h void main() { int i=3; int *p;  //声明p为指针变量  p=i; //指针p指向变量i printf(i=%d \t, i); printf(p=%d \n, *p); } 上机练习题 1、验证教材:例8.2~例8.5 2、* (鸡兔同笼问题)鸡有2只脚,兔有4只脚。设笼子里共有M只头N只脚,问鸡和兔各有多少只?要求用函数实现。 鸡兔同笼问题 分析:设鸡有x只,兔有y只,则 x + y = M 2*x + 4*Y = N 要求使用函数,但函数的返回值只能是一个值,现在需要求二个变量的值。使用指针可以实现。 8.9有关指针的小结 5.指针运算 指针变量加(减)一个整数 例如:p++,p--,p+i,p-i,p+=i,p-=i等均是指针变量加(减)一个整数。 将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加(减)。 8.9有关指针的小结 5.指针运算 (2)指针变量赋值 将一个变量地址赋给一个指针变量 不应把一个整数赋给指针变量 8.9有关指针的小结 5.指针运算 (3) 两个指针变量可以相减 如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数 8.9有关指针的小结 5.指针运算 (4) 两个指针变量比较 若两个指针指向同一个数组的元素,则可以进行比较 指向前面的元素的指针变量“小于”指向后面元素的指针变量 如果p1和p2不指向同一数组则比较无意义 8.9有关指针的小结 5.指针运算 (5) 指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示: p=NULL; 可否改为p1=b; p2=a;? 答:可以,这样更简洁,不需要中间变量. #include stdio.h int main() {…… if (ab) swap(a,b); printf(“max=%d,min=%d\n”,a,b); return 0; } void swap(int x,int y) { int temp; temp=x; x=y; y=temp; } 错!!! 无法交换a,b a b 5 9 x y 5 9 9 5 如果想通过函数调用得到n个要改变的值: ① 在主调函数中设n个变量,用n个指针变量指向它们 ② 设计一个函数,有n个指针形参。在这个函数中改变这n个形参的值 ③ 在主调函数中调用这个函数,在调用时将这n个指针变量作实参,将它们的地址传给该函数的形参 ④ 在执行该函数的过程中,通过形参指针变量,改变它们所指向的n个变量的值 ⑤主调函数中就可以使用这些改变了值的变量 例8.4 对输入的两个整数按大小顺序输出。 解题思路:尝试调用swap函数来实现题目要求。在函数中改变形参(指针变量)的值,希望能由此改变实参(指针变量)的值 #include stdio.h int main() {void swap(int *p1,int *p2); int a,b; int*pointer_1,*pointer_2; scanf(%d,%d,a,b); pointer_1=a; pointer_2=b; if (ab) swap(pointer_1,pointer_2); printf(max=%d,min=%d\n,a,b); return 0; } void swap(int *p1,int *p2) { int *p; p=p1; p1=p2; p2=p; } 错!!! 只交换形参指向 注意:函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。 要善于利用指针法。 例8.5 输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。 解题思路:采用例8.3的方法在函数中改变这3个变量的值。用swap函数交换两个变量的值,用exchange函数改变这3个变量的值。 #include stdio.h int main() { void exchange(int *q1, int *q2, int *q3); int a,b,c,*p1,*p2,*p3; scanf(%d,%d,%d,a,b,c); p1=a;p2=b;p3=c; exchange(p1,p2,p3); prin
显示全部
相似文档