#5004. [客观题]指针选择题

[客观题]指针选择题

  1. 如何正确声明一个整型指针?‌{{ select(1) }}
  • int p;
  • int* p;
  • int &p;
  • int p;
  1. 若int x = 5;,如何获取变量x的地址?‌ {{ select(2) }}
  • *x
  • &x
  • x.ptr
  • ptr(x)
  1. 以下哪项可以正确解引用指针p并获取其指向的值?‌ {{ select(3) }}
  • p*
  • *p
  • &p
  • p->value
  1. 若要通过函数修改外部变量的值,参数应如何传递?‌ {{ select(4) }}
  • 传值
  • 传引用
  • 传指针
  • B和C均可
  1. 函数void f(int *p) { p = new int(10); }调用后,实参会如何变化?‌ {{ select(5) }}
  • 实参指向新分配的地址
  • 实参的值被改为10
  • 实参的值不变
  • 编译错误
  1. 以下代码的输出是:‌
void f(int &a) { a = 20; }
int main() {
    int x = 10;
    f(x);
    cout << x;
}

{{ select(6) }}

  • 10
  • 20
  • 编译错误
  • 随机值
  1. 数组名arr在C++中等价于:‌ {{ select(7) }}
  • 数组首元素的地址
  • 数组的引用
  • 数组的指针副本
  • 数组的长度
  1. 若int arr[] = {1,2,3,4,5}; int *p = arr;,执行p++后,p指向:‌ {{ select(8) }}
  • arr
  • arr[1]
  • arr + 1
  • 未知地址
  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
  • 无错误
  1. 若int a = 5, b = 5; int *p1 = &a, *p2 = &b;,则p1 == p2的结果是:‌ {{ select(10) }}
  • True
  • False
  • 取决于编译器
  • 语法错误
  1. 以下代码执行后,变量 x 的值是?
void change(int a) { a = 100; }
int main() {
    int x = 5;
    change(x);
}

{{ select(11) }}

  • 5
  • 100
  • 随机值
  • 编译错误
  1. 以下代码执行后,变量 num 的值是?
void modify(int& r) { r = 200; }
int main() {
    int num = 10;
    modify(num);
}

{{ select(12) }}

  • 10
  • 200
  • 随机值
  • 编译错误
  1. 以下代码执行后,value 的值是?
void update(int* ptr) { *ptr = 300; }
int main() {
    int value = 20;
    update(&value);
}

{{ select(13) }}

  • 20
  • 300
  • 随机值
  • 编译错误
  1. 以下代码的输出是?
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
  • 随机值
  • 编译错误
  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
  • 随机值
  • 编译错误
  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
  • 随机值
  • 编译错误
  1. 以下代码执行后,p 指向的值是?
void allocate(int* ptr) { ptr = new int(50); }
int main() {
    int* p = new int(10);
    allocate(p);
}

{{ select(17) }}

  • 10
  • 50
  • 随机值
  • 内存泄漏
  1. 以下代码中,引用传递的主要优势是?
struct BigData { int data[1000]; };
void process(BigData& ref) { /* ... */ }

{{ select(18) }}

  • 允许修改原对象
  • 避免复制大对象
  • 支持多线程
  • 强制类型检查
  1. 以下函数声明的作用是?
void print(const string& s) { cout << s; }

{{ select(19) }}

  • 允许修改 s
  • 禁止修改 s 并避免拷贝
  • 强制 s 为临时对象
  • 语法错误
  1. 以下两段代码是否等价?
// 代码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