沈阳师范大学C++ pta第三章 指针引用
判断题
1.字符串常量实质上是一个指向该字符串首字符的指针常量。 — — — T
2.定义一个指针数组并初始化赋值若干个字符串常量,则指针数组并不存放这些字符串,而仅仅指向各个字符串。 — — — T
3.指向整数指针的指针与指向整数数组的指针可以看成是等价的类型。 — — — F
4.定义指针函数变量后,将一个函数名赋值该指针变量,要求函数的参数个数、类型一致。 — — — T
5.对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。— — — F
6.执行语句int *p; 后,指针变量p只能指向int类型的变量。— — — T
7.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。— — — F
8.若有定义char* p=“computer”;则表示p的值是字符串" computer "。— — — F
9.如果函数的返回类型是指针,则可以返回函数内部任意变量的地址。— — — F
10.语句 int *p[5]; 定义了一个指针数组p,用于指向一个有5个元素的数组。 — — — F
11.指向结构体变量的指针可以作函数参数,实现传址调用。。 — — — T
12.调用printf函数,%s的格式输出字符串时,字符数组名、字符指针和字符串常量都可以作为输出参数。 — — — T
13.语句int *p, q, r; 定义了3个指针变量。— — — F
14.两个任意类型的指针可以使用关系运算符比较大小。— — — F
15.可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。— — — T
16.char *s=“C Language”;表示s是一个指向字符串的指针变量,把字符串的首地址赋予s。— — — T
17.int i; int &ri=i;对于这条语句,ri和i这两个变量代表的是同一个存储空间。— — —T
18.指针数组的每个元素都是一个指针变量。— — — T
19.不同类型的指针变量是可以直接相互赋值的。— — — F
20.只要将多个指针作为函数的参数,函数就一定会返回多个值。— — — F
21.调用strcmp函数比较字符串大小时,通常较长的字符串会较大。— — —F
22.字符串常量在内存中的存放位置由系统自动安排。— — — T
单选题
设void f1(int * m,long & n);int a;long b;则以下调用合法的是()。
A.f1(&a,&b);
B.f1(a,b);
C.f1(&a,b);
D.f1(a,&b);
下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。
A.int a, *x = a;
B.int a, x = a;
C.int *x = &a, a;
D.int a, *x = &a;
下列程序片段哪一个是正确的。
A.int m=8; int &r1=m; const int r2=r1;
B.int m=5; const int &r=m; r=16;
C.int m=8; const int &r1=m; int &r2=r1 ;
D.int m=4; int &r=m*6;
对于int *pa[5];的描述,以下哪个选项是正确的
A.pa是一个具有五个元素的指针数组,每个元素都是一个int类型的指针
B.pa是一个指向某个数组中第五个元素的指针,该元素是int类型的变量
C.pa是一个指向数组的指针,所指向的数组是五个int类型的指针
D.pa[5]表示某个数的第五个元素的值
若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, ____是正确的。
A.p2=&p1
B.p2=**p1
C.p2=*p1
D.p2=p1
下列关于引用的说法,错误的是____。
A.引用初始化后,可以通过更变来引用其他变量
B.数组不能定义引用
C.引用在定义时必须初始化
D.引用在初始化时不能绑定常量值
下列哪一个说法是不正确的?
A.const T 类型的常变量和const T & 类型的常引用,也可以用来初始化T & 类型的引用
B.T & 类型的引用或T类型的变量,可以用来初始化const T &类型的引用
C.定义引用时,前面加const关键字,即为"常引用"
D.不能通过常引用去修改其引用的内容
以下不正确的赋值或赋初值的方式是( )。
A.char str[]=“string”;
B.char str[10];str="string";
C.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ’\0’};
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
下面程序段:
int main() {
int intone;
int &rsomeref = intone;
intone = 5;
cout<<intone<<" “<<rsomeref;
rsomeref = 7;
cout<<intone<<” "<<rsomeref;
return 0; }
输出结果为( )。
A.55 77
B.5 5 7 7
C.5 57 7
D.5577
以下哪个定义中的p不是指针,请选择恰当的选项:
A.char (*p)[10];
B.char **p;
C.char *p[6];
D.给出的三项中,p都是指针
下面程序段 int a=1,b=2; int &r=a; r=b; r=7; cout<<a<<endl; 的输出结果是?
A.1
B.无法确定
C.2
D.7
设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。
A.&a[0]+1
B.3
C.2
D.4
下面程序片段,哪一个是正确的?
A.int n=8; int &p=n; const int q=p ;
B.int m=5; const int &r=m; r=6;
C.int n=4; int &r=n*3;
D.int n=8; const int &p=n; int &q=p ;
若定义pf为指向float类型变量f的指针,下列语句中__是正确的。
A.float f, *pf = &f;
B.float f, *pf =0.0;
C.float *pf = &f, f;
D.float f, *pf = f;
若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。
A.x++
B.p++
C.*(p++)
D.&x++
已知:float b = 34.5; ,则下列表示引用的方法中,正确的是( )。
A.float &z;
B.float &y = 34.5;
C.int &t = &b;
D.float &x = b;
关于指针和引用,下面哪个说法是错误的()。
A.通过访问符*来访问指针所指存储空间中的值。
B.指针和引用对它们所指的或所引用的变量的操作方式不一样。
C.和指针类似,引用被初始化后,还可以引用别的变量。
D.引用较高级地封装了指针的特性,它不直接操作内存地址,而是通过访问变量别名来间接操作变量的。
对于如下说明,语法和语义都正确的赋值是_____。
int c, *s, a[]={1, 3, 5};
A.c=a;
B.c=*s;
C.s[0]=a[0];
D.s=&a[1];
已知:int a(5),&ra=a;下列描述中,错误的是( )。
A.ra是变量a的引用,即为变量的别名
B.ra的值为5
C.ra的地址值为&a
D.改变ra的值为10,变量a值仍为5
根据声明int a[10], *p=a; ,下列表达式错误的是( )。
A.*p++
B.a[9]
C.a++
D.p[5]
在基类型相同的两个指针变量之间,不能进行的运算是( )。
A.+
B.<
C.–
D.=
下列对变量的引用中错误的是____。
A.float a; float &p = a;
B.int a; int &p; p=a;
C.char a; char &p = a;
D.int a; int &p = a;
若已定义: int a[9], *p=a;并在以后的语句中未改变 p 的值,不能表示 a[1] 地址的表达式是( )。
A.a++
B.p+1
C.a+1
D.++p
对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:
A.3 ,4
B.3 ,11
C.12 ,13
D.3 ,9
( )是给变量取一个别名,引入了变量的同义词。
A.引用
B.结构
C.指针
D.枚举
根据声明int (*p)[10], p是一个( )。
A.数组
B.数组的元素
C.函数
D.指针
下列哪一个说法是不正确的?
A.引用可以引用变量,也可以引用常量和表达式
B.定义引用时一定要将其初始化成引用某个变量
C.初始化后,它就一直引用该变量不会再别引用别的变量了
D.某个变量的引用等价于这个变量,相当于该变量的一个别名
填空题
write the output of the code below.
#include <iostream>
using namespace std;
int& f(int &i )
{
i += 10;
return i ;
}
int main()
{
int k = 0;
int& m = f(k);
cout << k << "#";
f(m)++;
cout << k << endl;
return 0;
}
10#21
编程题
R7-1 实数排序
本题要求编写程序,输入n个实数,使用指针引用的方式将它们按从大到小的顺序排列。
输入格式:
输入第一行给出一个正整数n(2≤n≤10),输入第二行给出n个实数,其间以空格分隔。
输出格式:
输出从大到小排好序的n个数(保留2位小数),每个数之间空一格,行末没有空格。
输入样例:
在这里给出一组输入。例如:
5
3.2 5.4 6.12 2.51 4.23
输出样例:
在这里给出相应的输出。例如:
6.12 5.40 4.23 3.20 2.51
#include <iostream>
#include <string>
#include