奇怪的 c 指针问题
Strange c pointer issue
我在求职面试中遇到了这种问题。这段代码似乎非常简单:
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 中哪一个是等价的。
这里的问题是,一旦初始化,就不能将引用分配给指向另一个对象。因此,与指针最接近的类比是指向非常量对象的常量指针。因此,您只需要找到一个匹配的表达式:
const *long c = &a; // invalid
const long *d = &a; // non-const pointer to const long
const * long e = &a; // invalid
long *const f = &a; // const pointer to non-const long
- 语法无效。
- 指向常量对象的指针。指针地址可以更改,数据不能更改。
- 语法无效。
- 最后一个是指向非常量对象的常量指针。就像对非常量引用一样。
让我们检查一下代码:
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, %dn", a, &a, b, &b); \ a and b are 555
但是您不能更改 b 的地址(也是)。考虑到上述所有因素,您可以假设第四个选项是正确的答案,因为您也无法更改此指针的地址。
long *const f = &a;
我想你们都忘了提到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
相关文章:
- 链表指针问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- C++指针问题:如何修复这些代码中的错误?
- *++*++ppp,*++pp[1],*++(*(1+ppp)有什么具体的区别吗?(C/C++指针问题)
- C++ 入门加列表:10.9 "顶部"指针问题
- C++ 指针问题 - 通过方法更新指针
- 未分配正在释放的指针 - 指针问题
- 双指针问题通过函数传递错误
- 在C++中实现图形 DFS,指针问题
- 返回指针问题
- C++ - 有人有分析指针到指针问题的技巧吗?
- 选择排序指针问题
- 涉及删除操作的 C++ 指针问题
- 模板类指针问题 c++
- Swig和指针问题(python)
- 引用指针问题
- 函数指针问题
- 通过类型C++ 的继承树递归导致此指针问题
- 无法将文件读入字符数组(像往常一样,某些指针问题)
- 结构中的指针问题