1、 pi = & pj = pi;3.1画出变量i、pi和pj的形象状态图。3.2对于变量i所标识的存储单元,现在有几种使用途径?3.3分析下面语句的输出并编程验证。 *pj = i + *pi;%d,%d,%dn, i, *pi, *pj);4.分析并比较下面三个程序的输出。4.1#include void main( ) int i = 3, j = 2; int *pi, *pj, *ptemp; pj = &j;%d,%dn, i, j);, *pi, *pj); ptemp = pi; pi = pj; pj= ptemp;4.2 int i = 3, j = 2, temp; int
2、 *pi, *pj; temp = *pi; *pi = *pj; *pj= temp;4.3 temp = i; i = j; j= temp;5有int *pi;,如何评价语句pi=π?实验9-2 空指针进一步理解指针变量的作用。1.分析讨论下面程序的说法。使用指针变量有两个步骤。第一步:通过赋值(初始化)操作使指针变量指向某存储单元。(如int i, *pi=&或pi=&或pi=pj;等)第二步:通过间接引用操作符使用指针变量指向的存储单元。(如printf(%d, *pi);或*pi=5;2.指出并改正下面程序中的错误。 float f = 2.3, *pf; *pf = *pf
3、 * *pf;%f,%dn, f, *pf);3.分析下面的程序。3.1 #include NULL) printf(%d是正数!n, i); else%d是非正数!分析:1)3.1和3.2两个程序有何区别?2)如何评价程序3.3?0与NULL相同吗?通常如何使用?4.(练习9.13)已知整型指针变量pa,pb,pc分别指向整型变量a,b,c。按下面要求编程。4.1使用指针交换a,b,c的值,使变量a,b,c按升序排列。(指针指向的对象不变,即pa一直指向a。)4.2变量a,b,c的值不变,但pa,pb,pc指向的变量按升序排列(即pa指向值最小的变量。实验9-3 函数的形参为指针变量理解地址
4、传递的特点,掌握指针为形参时的用法。1.分析求两个整数和的函数。1.1程序如下:int add(int x, int y) int z; z = x + y; return z;void main() int a = 23, b = -5; int c; c = add(a, b);%d + %d = %dn, a, b, c);如图1所示,C语言中函数调用最重要的特点是 传值调用 。图1 函数的传值调用1.2程序如下:int add(int *x, int *y) z = *x + *y; c = add( &a , & b );1)把程序补充完整。使用函数调用add(a, b)可以吗?为什
5、么?2)使用函数调用add(&a, &b)可以吗?假设此时变量a和b的地址分别为0x0012ff7c和0x0012ff78,把图2补充完整。图2 函数的传值调用指针变量x的内容为变量a的地址,也就是说指针变量x指向了变量a,使用*x也可以访问变量a所标识的存储单元了。3)为什么可以在add函数中使用main函数中的变量a?答:这个问题有问题!add函数中不可以使用变量a,在add函数中只是使用了变量a所标识的存储单元!只要存储单元归程序所有就可以通过指针使用它!2.分析下面的程序。void change(float *pf) *pf = 5.23; float fa = 2.3;%fn, fa
6、); change(&fa);change函数为何可以改变main函数中局部变量fa的值?3.根据指针做参数的特点,改写add函数使其返回值为void,其首部为void add(int x, int y, int *pSum)。1)改写后的函数如何使用?2)与实验7-5中的add函数相比有何差异?3)C语言中所有的函数都可以没有返回值吗?4.scanf函数为何可以改变“实参”的值?4.1当用户输入23回车时,下面的程序有何输出? int i, *pi = &, pi);, i, *pi);4.2分析下面的程序。char buffer100 = 23n;void scanInt(int *p)
7、int value = 0; int i = 0; while(bufferi != n value = value * 10 + (bufferi - 0); +i; *p = value; scanInt(&%dn实验9-4 函数的返回值为指针变量进一步理解野指针。1.分析下面的程序(例9-9)。int *test( ) int i = 5, *pi = & return pi;void test2( ) int j = 3; int *pj; pj = test( ); test2( );, *pj);程序的输出结果为3,不是5,为什么?2.比较下面两个程序。2.1void test(i
8、nt *pi) *pi = 5; int *p; test(p);程序中其它功能n2.2 if(pi = NULL)错误!实参为空指针! return; int *p = NULL;1)两个程序中有语法错误吗?第一个程序会出现错误,非法访问!第二个*pi = 5有语法错误。2)两个程序运行结果相同吗?第一个出现非法访问第二个是:注意:在函数中检测指针参数是否为空指针会提高代码的健壮性。负责的程序员必须保证指针变量指向合法的地址。实验9-5 指针变量的运算理解指针变量运算的特点。1.分析程序指出数组元素在内存中的存放特点。1.1 int a3 = 1, 2, 3; for(i=0; i3; +i
9、)%xtai);1.2 char ch6 = China6;chi); 1.3 int b23 = 1, 2, 3, 4, 5, 6; int i, j;2; for(j=0; j +j) printf(bij);2.分析下面的程序,并根据输出结果分析指针变量运算的特点。 int i, *p; p = &a0; +i, +p)a%d:%x,%dn, i, &ai, ai);, i, p, *p);2.2参照2.1编程使用指针变量输出1.2中数组的元素。2.3参照2.1编程使用指针变量输出1.3中数组的元素。3.指针变量p的内容为0x0012ff00,求出表达式p+1的值和类型。4.分析程序。 int *pa, *p; pa = & for(p=pa; p -p), pa-&a0, *p);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1