内容发布更新时间 : 2024/12/25 23:49:06星期一 下面是文章的全部内容请认真阅读。
习题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 char *p; p=\printf(\return 0; } 解:该程序错。应为: printf(\(2)#include 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 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; } 程序运行情况如下: