加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:24:22 所属栏目:百科 来源:网络整理
导读:这是最新版本的Stroustrup的“C编程语言”中的一个问题. 在过去的几天里,我一直在考虑这个问题. 我能想到的唯一的事情(这可能是不正确的)是这样的: int* f(int n) { int* a = a - n * sizeof(int*); return a;} 我的目的是获得堆栈上更高级别的地址.这有意
这是最新版本的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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读