第4章 指 针
思考与练习题
1、什么叫内存单元的地址?什么叫指针?
答:在计算机内部的存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。内存单元的编号,称为内存单元的地址。
在C++语言中,内存单元的地址称为指针。 2、什么叫指针变量?什么叫指针的目标?
答:专门用来存放地址的变量,称为指针变量(pointer variable)。指针指向的内存区域中的数据称为指针的目标。
3、什么叫空指针?其作用是什么?
答:所谓空指针就是指针变量的内容为零的状态。 4、指针运算的实质是什么?
答:指针运算是以指针变量所存放的地址量作为运算量而进行的运算。因此,指针运算的实质就是地址的计算。
5、指针有哪些运算?请枚举这些计算。
答:指针运算的种类是有限的,它只能进行算术运算、关系运算和赋值运算。 6、什么叫数组的指针?什么叫指针数组的指针?
答:在C++语言中,数组的指针是指数组在内存中的起始地址。
指针变量数组和普通的一般变量数组一样,编译系统在处理指针数组说明时, 按照指定的存储类型为它在内存中分配一定的连续存储空间,这时指针数组名就表示该指针数组的存储首地址,即指针数组的指针。
7、什么叫二级指针变量?什么叫多级指针变量?
答:对于指向处理数据的指针变量称为一级指针变量,简称一级指针。而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针。我们把一个指向指针变量的指针变量,称为多级指针变量。
8、new运算符的作用是什么?delete运算符的作用是什么?
答:运算符new主要用于分配内存,并获得分配到的内存的首地址,通常需要将其赋给相应数据类型的指针。如果程序中不再需要由new分配的内存空间时,用运算符delete
释放这些空间。
9、什么叫引用?
答:所谓引用是指给一个变量或一个数组起一个别名。使用引用进行运算的实质是操作原来的变量或数组本身的另一个使用名称。
10、const型指针有几种形式?其作用是什么? 答:const型指针主要有下面三种形式:
( a ) 常量化指针目标表达式 :常量化指针目标是限制通过指针改变其目标的数值。 ( b ) 常量化指针变量 :常量化指针变量,使得<指针变量>的地址值不能修改。但可以通过*<指针变量名称>可以修改指针所指向变量的数值。
( c ) 常量化指针变量及其目标表达式:常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值。
11、什么叫void型指针?其作用是什么?
void型的指针变量是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类型的变量或数组。
12、如说明 int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *pa=a;
请给出访问第i+1个元数即a[i]的几种等价表达形式。 答:a[i],*(pa+i),*(a+i),pa[i] 13、请给出下列问题的计算结果:
(1)若int x=8, y(10), *p=&x ; 则经过 y += x+2, *p=++x+y- - ; 的运算之后,
cout< (2)若int x(1), y=2, z(3), *pw=&z ; 则经过语句y+=*pw+1, x+=++y, *pw += x -y; 的运算, 则 x, y, z 的结果值各是什么? 答:8 7 4 (3)若int a[4]={1,2 ,3,4}; 则a[2]=a[0]+*(a+3)+a[1]++ 运算之后,a的各元素存放的是什么? 答:a[4]={1, 3, 7, 4} (4)若说明int a[8]={7,6,5,4,3,2,1,0}, *p=&a[7]; 则经过表达式 *(p-1) += ( *p+=1, *(p - = 6) +=3, *(p+4) += 1 ); 运算后,则数组a各元素的值是什么? 答:10 9 5 4 3 3 1 1 (5)若说明int x, data[8]={1,2 ,3,4,5,6,7,8}; 则x=*(data+1)+*(&data[5]-2)之后, x存放的数是什么? 答:6 (6)若说明int a=16; int &ra = a; 经过语句 a += 2; ra +=2 ; 执行之后, 表达式 ra+1 的结果是多少? 答:21 (7) 若说明int a[3]={8, 18, 28}; int (&ra)[3] = a; 经过语句 ra[0] +=12; a[1] +=2 ; 执行之后,则数组a各元素的值是什么? 答:20 20 28 (8) 若说明 int x=16 ; const int *px =&x; 经过语句 x=26; 则表达式 *px+4 的结果是多少? 答:30 (9) 若说明 int a=82 , b(28) ; const int * pa = &a; 则表达式 *px+2 的结果是多少? 答:30 (10) 若说明 int x=99; int * const px =&x ; 则表达式 *px 的结果是多少? 答: 100 经过语句 x += 1; 经过语句 pa = &b;