C语言指针练习详解及答案 (第七章)

0 下载量 33 浏览量 更新于2024-01-13 1 收藏 91KB DOC 举报
&a; 将a的地址赋值给b之后,*b表示取b中地址对应的值,即a的值511,因此printf("%d\n", *b);的输出结果为511。这里要注意的是,*b表示取b指向的地址对应的值,而b本身是a的地址。 3. 下列程序的功能是找出整型数组a的最大元素值。使用指针变量p。 ` A. int max(a[], n) int a[], n; { int i,max; max=a[0]; for(i=1;i<n;i++) if(a[i]>max) max=a[i]; return max; } B. int max(p,n) int ∗p,n;{ int max; max=∗p; p++; n−−; while(n>0) if(∗p>max) max=∗p;p++; n−−; return max;} C. int max(int ∗p,int n){ int max; max=∗p; p++; while(n−−>1)if(∗p>max)max=∗p;p++; return max;} D. int *max(inta[],intn){int∗p=a; for(int ∗q=a+1;q<a+n;q++)if(∗q>∗p)p=q;return p;} 经分析发现,只有D选项的程序才是正确的,该程序通过定义指针变量p来遍历整型数组a,找出其中最大的元素值。 4.若定义: int a[5]={1, 2, 3, 4, 5}; 则下面的函数调用: f(a);所代表的意义是:(D) A. 把数组a 中元素的内容作为实参传递给函数f。 B. 把指针a 传递给函数 f。 C. 把数组a的地址的内容传递给函数f。 D. 把数组a的地址传递给函数f。 int a[5]={1, 2, 3, 4, 5}中的a代表数组a的地址,即&a[0]的地址。而函数调用f(a)中传递的是数组a的地址,即&a[0]的地址。因此,选项D正确。 5.若说明:int a[2][3]={1, 2, 3, 4, 5, 6,};,则下面对于变量a的描述中,正确的是:(B) A. a 是一个指向整型数的指针。 B. a 是一个指向含有3 个整型元素的指钨。 C. a 是一个指向含有2 个整型元素的指针。 D. a 是一个指向含有3 个整型元素的指针。 int a[2][3]代表一个二维数组,其中2表示有2个维数,3表示每一维度上有3个元素。因此,a是一个指向含有3个整型元素的指针。选项B正确。 7.若说明:int a=2, ∗p=&a,∗q=p;则以下非法的赋值语句是(D)。 A. p=q; B. *p=*q; C. a=*q; D. q=a; 已知int a=2,*p=&a,*q=p,根据运算符的结合性和优先级,*p=*q合法,意思是将q指向的值赋给p指向的值;a=*q合法,意思是将q指向的值赋给a,p=q合法,意思是将q的值赋给p,最后一个q=a是非法的,q是指向p的指针,a是整型数,无法将整型数赋给指针。因此,选项D不合法。"