5.15 自测练习
5.1 填空
a)指针变量包含另一变量的——值。
b)可以初始化指针的值有——、——或——。
c)可以赋绐指针的惟一整数是——。
5.2判断下列各题是否正确。如果不正确,请说明原因。
a)地址运算符&只能用于常量、表达式和mgaster存储类声明的变量。
b)声明为void的指针可以复引用。
c)不同类型的指针不必进行强制类型转换操作即可相互赋值。
5.3 问答下列问题。假设单精度浮点数存放在4字节中,数组在内存中的开始地址为1002500。
每道习题尽量使用前面的结果。
a)声明float类型数组numbem,含有10个元素,初始化为0.0、1.1、2.2....9.9。假设符号化常量SIZE定义为10。
b)声明指针nPtr,指向float类型对象。
c)用数组下标符号打印数组numbers的元素。使用for结构,假设声明了整型控制变量i。打印每个数,小数点后面的精度为1。
d)用两条不同语句将数组numbers的开始地址赋给指针变量nPtr。
e)用指针nPtr和指针/偏移量符号打印数组numbers的元素。
f)用数组名作为指针和指针/偏移量符号打印数组numbers的元素。
g)用指针nPtr的下标打印数组numbers的元素。
h)用数组下标符号、数组名作为指针和指针/偏移量符号、nPtr与指针下标符号和nPtr与指针/偏移量符号打印数组numbers的元素4。
i)假设nPtr指向数组numbers开头,nPlr+8指哪个地址,这个地址存放什么值?
j)假设nPtr指向numbers[5],执行nPtr-=4之后nPtr引用哪个地址?这个地址存放什么值?
5.4 对下列各题,各编写一条语句。假设已声明浮点数变量number1和number2,number1初始化为7.3。并假设变量ptr为char*类型,数组s1[100]和s2[100]为char类型。
a)声明变量fPtr为float类型对象的指针。
b)将变量number1的地址赋给指针变量fPtr。
c)打印fPtr所指的对象值。
d)指定fPtr所指对象值为变量number2。
e)打印number2的值。
f)打印number1的地址。
g)打印fPtr中存放的地址,打印的值是否与number1的地址相同?
h)将数组s2中存放的字符串复制到数组s1中。
i)比较s1中的字符串与s2中的字符串并打印结果。
j)将s1中字符串中的10个字符添加到s1中的字符串中。
k)确定s1中的字符串的长度。
l)将s2中第一个标记的地址赋给ptr。s2中的标记用逗号(,)分开。
5.5 根据题目要求编写语句。
a)编写函数exchange的函数首部,取两个浮点数x和y的指针为参数,不返回数值。
b)编写a)中函数的函数原型。
c)编写函数evaluale的函数首部,返回整数,取整数x和函数poly的指针参数。函数poly取一个整数参数并返回一个整数。
d)编写c)中函数的函数原型。
e)显示用元音字符串“AEIOU'’初始化字符数组vowel的两种不同方法。
5.6 找出下列程序段中的错误。假设:
int *zPtr; // zPtr will reference array z
int aPtr = 0;
void *sPtr = 0;
int number, i;
int z[ 5 ] = { 1, 2, 3, 4, 5 } ;
sPtr = z;
a) ++zPtr;
b) // use pointer to get first value of array
nunmber = zPtr;
c) // assign array element 2 (the value 3) to number
number = *zPtr[ 2 ];
d) // print entire array z
for ( i = 0; i <= 5; i++ )
cout << zPtr[ i ] << endl;
e) // assign the value pointed to by sPtr to number
number sPtr;
f) ++z;
char s[ 10 ];
cout<< strncpy( s, "hello", 5 ) << endl;
h) char s[ 12 ];
strcpy( s, "Welcome Home" );
i) if ( strcmp( string1, string2 ))
cout << "The strings are equal" << endl;
5.7 执行下列语句时打印什么(如果有)?如果语句中有错,说明错误及纠正方法。假设声明下列变量:
char s1[ 50 ] = "jack", s2[ 50 ] = "jill",s3[ 50 ], *sptr;
a) cout << strcpy( s3, s2) << endl;
b) cout << strcat( strcat( strcpy( s3, s1 ), "and" ), s2)
c) cout << strlen( s1 ) + strlen( s2 ) << endl;
d) cout << strlen( s3 ) << endl;