C语言程序设计习题6

习题6参考解答

1.请解释以下术语的含义:

地址 指针 指针变量 直接访问 间接访问 解:(1)地址:内存单元的编号叫做地址。

(2)指针:内存单元的编号叫做地址,通常也叫做指针。

(3)指针变量:在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。 (4)直接访问:通过变量名称引用变量内存单元的方式称为直接访问。

(5)间接访问:利用了指针变量,通过变量的指针(即变量的内存地址)来引用内存单元的值,这种方式称为间接访问。

2.指针能参与哪几种运算?举例说明。 解:(1)指针变量和整数可以进行加/减运算: p++、p--、p+i、p-i、p+=i、p-=i (2)指针变量可进行赋值运算:

p=&a; 变量a的地址赋给p,即指针p指向a p=array; 数组array首地址赋给p p=&array[i]; 数组元素array[i]的地址赋给p p=max; 函数max的入口地址赋给p

p1=p2; 指针p2的值赋给指针p1,即p1、p2所指的数据相同 (3)同类指针变量在一定的条件下可以作相减运算: p-q

(4)同类指针变量在一定的条件下可以作比较运算:

p

3.判断下面两个程序的正误,若错误指出原因。 (1)#include int main() {

char *p;

p=\printf(\return 0; }

解:该程序错。应为:

printf(\(2)#include int main() { int *p; *p=25;

printf(\return 0; }

解:该程序错。指针变量没有赋初值。

4.输入3个整数,输出其中最大数。要求用指针变量实现。 解:

#include\int main() {

int a=0,b=0,c=0;

int*aa=NULL,*bb=NULL,*cc=NULL,*p=NULL; aa=&a,bb=&b,cc=&c; printf(\scanf(\printf(\ p=aa;

if(*p<*bb) p=bb; if(*p<*cc) p=cc;

printf(\return 0; }

程序运行情况如下:

input 3 number:4 5 9↙ a=4 b=5 c=9 9

5.有3个整型变量i,j,k。请编写一个程序,设置3个指针变量p1,p2,p3,分别指向i,j,k,然后通过指针变量使i,j,k 3个变量的值顺序交换,即原来i的值赋给j,把j的原值赋给k,把k的原值赋给i。i,j,k的原值由键盘输入,要求输出i,j,k的原值和新值。

解:

#include int main() {

int i,j,k,tmp; int *p1,*p2,*p3;

scanf(\

printf(\ p1 = &i; p2 = &j; p3 = &k; tmp=*p3; *p3=*p2; *p2=*p1; *p1=tmp;

printf(\ return 0; }

程序运行情况如下:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4