当前位置 : 主页 > 编程语言 > c++ >

TCPL 5.9.9(C):在自己的初始化程序中使用名称有意义吗?

来源:互联网 收集:自由互联 发布时间:2021-06-23
这是最新版本的Stroustrup的“C编程语言”中的一个问题. 在过去的几天里,我一直在考虑这个问题. 我能想到的唯一的事情(这可能是不正确的)是这样的: int* f(int n) { int* a = a - n * sizeof(i
这是最新版本的Stroustrup的“C编程语言”中的一个问题.

在过去的几天里,我一直在考虑这个问题.

我能想到的唯一的事情(这可能是不正确的)是这样的:

int* f(int n) {
  int* a = &a - n * sizeof(int*);
  return a;
}

我的目的是获得堆栈上更高级别的地址.这有意义吗?还有其他人有其他答案吗?请记住,这是在第5章(指针,数组和结构)中,所以答案不应该涉及书中的后续内容.

我所知道的唯一(几乎)合理的情况是当你想将一个指向对象本身的指针传递给它的构造函数时.例如,假设您有一个循环链表节点:

class Node
{
public:
    Node(Node* next): next(next) {}
private:
    Node* next;
};

并且您想在堆栈上创建单元素循环列表.你可以这样做:

Node n(&n);

其他一些不实用的例子(即我不明白为什么你需要那种东西),但其他方面都有效:

int n = sizeof(n);
void* p = &p;
网友评论