奇怪的c指针问题

时间:2016-07-08 07:25:42

标签: c++

我在求职面试中遇到过这样的问题。 这段代码似乎很简单:

  long a = 1234;
  long &b = a;

对我来说,a和b是一回事。 但我被问到以下4个表达式是同一个什么

  const *long c = &a;
  const long *d = &a;
  const * long e = &a;
  long *const f = &a;

老实说,我不明白4中哪一个是等价的。

4 个答案:

答案 0 :(得分:4)

这里的事情是,一旦初始化,就不能将引用指定为指向另一个对象。因此,与指针最接近的类比是指向非常量对象的常量指针。因此,您只需要找到一个匹配的表达式:

const *long c = &a; // invalid syntax
const long *d = &a; // non-const pointer to const long
const * long e = &a; // invalid syntax
long *const f = &a; // const pointer to no-const long

答案 1 :(得分:1)

  1. 语法无效。
  2. 指向常量对象的指针。指针地址可以改变,数据不能改变。
  3. 语法无效。
  4. 最后一个是指向非常量对象的常量指针。就像对非const的引用一样。

答案 2 :(得分:0)

让我们检查一下代码:

  long a = 1234; // you declare variable and initialize with 1234 value
  long &b = a;   // you declare another variable that points to the same address as a

在这种情况下,如果您同时打印,则会看到两者具有相同的地址和值:

  a = 555;
  printf("%d, %d, %d, %d\n", a, &a, b, &b); \\ a and b are 555

但你不能改变b(也是)的地址。考虑到以上所有因素,您可以假设第四个选项是正确答案,因为您也无法更改此指针的地址。

  long *const f = &a;

答案 3 :(得分:0)

我想你们所有人都忘了提到C声明的原则:你应该从右到左阅读它,除非它被括号括起来。

const *long c // c is a long of const pointer, wtf?
const long * d // d is a pointer to a const long, good
const * long e // space doesn't matter in C
long * const f // f is a const pointer to long, good