我在求职面试中遇到过这样的问题。 这段代码似乎很简单:
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中哪一个是等价的。
答案 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)
答案 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