#5004. [客观题]指针选择题
[客观题]指针选择题
- 如何正确声明一个整型指针?{{ select(1) }}
- int p;
- int* p;
- int &p;
- int p;
- 若int x = 5;,如何获取变量x的地址? {{ select(2) }}
- *x
- &x
- x.ptr
- ptr(x)
- 以下哪项可以正确解引用指针p并获取其指向的值? {{ select(3) }}
- p*
- *p
- &p
- p->value
- 若要通过函数修改外部变量的值,参数应如何传递? {{ select(4) }}
- 传值
- 传引用
- 传指针
- B和C均可
- 函数void f(int *p) { p = new int(10); }调用后,实参会如何变化? {{ select(5) }}
- 实参指向新分配的地址
- 实参的值被改为10
- 实参的值不变
- 编译错误
- 以下代码的输出是:
void f(int &a) { a = 20; }
int main() {
int x = 10;
f(x);
cout << x;
}
{{ select(6) }}
- 10
- 20
- 编译错误
- 随机值
- 数组名arr在C++中等价于: {{ select(7) }}
- 数组首元素的地址
- 数组的引用
- 数组的指针副本
- 数组的长度
- 若int arr[] = {1,2,3,4,5}; int *p = arr;,执行p++后,p指向: {{ select(8) }}
- arr
- arr[1]
- arr + 1
- 未知地址
- 以下哪行代码会导致编译错误?
int main() {
int a = 10;
int *p1 = &a; // 行1
int *p2 = 100; // 行2
int *p3 = NULL; // 行3
int *p4 = 0; // 行4
}
{{ select(9) }}
- 行2
- 行3
- 行4
- 无错误
- 若int a = 5, b = 5; int *p1 = &a, *p2 = &b;,则p1 == p2的结果是: {{ select(10) }}
- True
- False
- 取决于编译器
- 语法错误
- 以下代码执行后,变量 x 的值是?
void change(int a) { a = 100; }
int main() {
int x = 5;
change(x);
}
{{ select(11) }}
- 5
- 100
- 随机值
- 编译错误
- 以下代码执行后,变量 num 的值是?
void modify(int& r) { r = 200; }
int main() {
int num = 10;
modify(num);
}
{{ select(12) }}
- 10
- 200
- 随机值
- 编译错误
- 以下代码执行后,value 的值是?
void update(int* ptr) { *ptr = 300; }
int main() {
int value = 20;
update(&value);
}
{{ select(13) }}
- 20
- 300
- 随机值
- 编译错误
- 以下代码的输出是?
void mswap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}
int main() {
int x = 1, y = 2;
mswap(x, y);
cout << x << " " << y;
}
{{ select(14) }}
- 1 2
- 2 1
- 随机值
- 编译错误
- 以下代码的输出是?
void swap(int& a, int& b) {
int tmp = a;
a = b;
b = tmp;
}
int main() {
int x = 1, y = 2;
swap(x, y);
cout << x << " " << y;
}
{{ select(15) }}
- 1 2
- 2 1
- 随机值
- 编译错误
- 以下代码的输出是?
void mswap(int* pa, int* pb) {
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main() {
int x = 1, y = 2;
mswap(&x, &y);
cout << x << " " << y;
}
{{ select(16) }}
- 1 2
- 2 1
- 随机值
- 编译错误
- 以下代码执行后,p 指向的值是?
void allocate(int* ptr) { ptr = new int(50); }
int main() {
int* p = new int(10);
allocate(p);
}
{{ select(17) }}
- 10
- 50
- 随机值
- 内存泄漏
- 以下代码中,引用传递的主要优势是?
struct BigData { int data[1000]; };
void process(BigData& ref) { /* ... */ }
{{ select(18) }}
- 允许修改原对象
- 避免复制大对象
- 支持多线程
- 强制类型检查
- 以下函数声明的作用是?
void print(const string& s) { cout << s; }
{{ select(19) }}
- 允许修改 s
- 禁止修改 s 并避免拷贝
- 强制 s 为临时对象
- 语法错误
- 以下两段代码是否等价?
// 代码1
void func(int* p) { *p = 100; }
cpp
// 代码2
void func(int& r) { r = 100; }
{{ select(20) }}
- 完全等价
- 调用代码1需传递地址,调用代码2直接传变量
- 代码2会拷贝变量
- 代码1无法修改原值
21.代码的运行结果是()
int a[]={2,3,4,1,5,6};
int b=10;
int *p=a;
p+=3;
a[3]=b;
cout<<(*p);
{{ select(21) }}
- 1
- 3
- 4
- 10
22.代码的运行结果是()
char b[10]="abcdefghi";
char *p=b+5;
cout<<(*p);
{{ select(22) }}
- f
- g
- h
- e
23.有一个二维数组a[3][4],其2行3列元素a[2][3]的正确表示方法为()
{{ select(23) }}
- &a[2][3]
- a[2]+3
- *(a+2)+3
- *(a[2]+3)
24.若有以下定义和语句
int a[]={1,2,3,4,5,6,7,8,9,0},*p=a;
p+=2;
以下哪段代码会输出3
{{ select(24) }}
- cout<<p;
- cout<<*p;
- cout<<*(p+2);
- cout<<*p+2
25.若有以下定义
char s[20]="programming",*p=s;
以下哪段代码不会输出r
{{ select(25) }}
- cout<<(p+1);
- cout<<p[1];
- cout<<*(p+1);
- cout<<s[1];
26.代码的运行结果是()
int **pp,*p,a=10,b=20;
p=&a;
pp=&p;
p=&b;
cout<<*p<<","<<**pp;
{{ select(26) }}
- 10,20
- 10,10
- 20,10
- 20,20
27.代码的运行结果是()
int a=2,b=4,c=6;
int *pa=&a, *pb=&b, *pc=&c;
*pc=*pa*(*pb);
cout<<c;
{{ select(27) }}
- 6
- 8
- 12
- 24
28.代码的运行结果是()
char s[]="9876";
for(char *p=s;p<s+2;p++)
cout<<p;
{{ select(28) }}
- 9876876
- 987600
- 987698
- 9876
29.代码的运行结果是()
int a[]={6,7,8,9,10};
int *p=a;
*(p+2)+=2;
cout<<(*p)<<','<<*(p+2);
{{ select(29) }}
- 6,8
- 6,10
- 8,10
- 6,8,10
30.代码的运行结果是()
int a[2];
int *p=a;
*p=2;
p++;
*p=5;
p--;
cout<<a[0]<<','<<a[1];
{{ select(30) }}
- 2,4
- 2,5
- 3,4
- 3,5
31.代码的运行结果是()
char s[]="ABCDEFG";
char *p=s;
cout<<(*(p+5));
{{ select(31) }}
- 5
- E
- F
- '\0'
32.代码的运行结果是()
int a[]={2,3,4};
int s=1;
int *p=a;
for(int i=0;i<3;i++)s*=*(p+i);
cout<<s;
{{ select(32) }}
- 0
- 24
- 72
- 108
33.代码的运行结果是()
int *p,a=3,b=5;
int *pa=&a,*pb=&b;
if(*pa < *pb) p=pa,pa=pb;pb=p;
cout<<a<<','<<b;
{{ select(33) }}
- 3,3
- 3,5
- 5,3
- 5,5
34.如果要输出3,应该输入几?()
int a[]={1,2,3,4,5,6,7,8};
int *p=a;
scanf("%d",p);
printf("%d",*(a+*a));
{{ select(34) }}
- 1
- 2
- 3
- 以上都不对
35.如果要输出4,应该输入几?()
int a[5];
int *p=a;
for(int i=0;i<5;i++)
scanf("%d",++p);
printf("%d",a[*p]);
{{ select(35) }}
- 1 2 3 4 5
- 5 4 3 2 1
- 1 3 5 2 4
- 2 5 4 1 3