首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解释指向C#/ C++开发人员的Java指针?

如何解释指向C#/ C++开发人员的Java指针?
EN

Stack Overflow用户
提问于 2011-03-03 07:14:31
回答 7查看 1.9K关注 0票数 19

我是一名C#/Java开发人员,正在努力学习C++。当我试图学习指针的概念时,我突然想到我以前一定处理过这个概念。如何仅使用.NET或Java开发人员熟悉的概念来解释指针?我真的从来没有处理过这个问题吗,它对我来说只是隐藏的,还是我一直在使用它,而没有调用它?

EN

回答 7

Stack Overflow用户

发布于 2011-03-03 07:18:39

解释堆栈和堆之间的区别以及对象的位置。

诸如结构( C++和C#)之类的值类型被放入堆栈。引用类型(类实例)被放到堆上。指针(或引用)指向该特定实例在堆上的内存位置。

引用类型是关键字。在C++中使用指针就像在C#中使用ref关键字一样。

托管应用程序使得使用这些东西变得容易,因此.NET开发人员可以省去麻烦和困惑。幸好我不再做C语言了。

票数 2
EN

Stack Overflow用户

发布于 2011-03-03 07:30:20

C#中的引用与C++中的指针的作用相同,没有所有杂乱的语法。

考虑以下C#代码:

代码语言:javascript
复制
public class A
{
    public int x;
}

public void AnotherFunc(A a)
{
    a.x = 2;
}

public void SomeFunc()
{
    A a = new A();
    a.x = 1;

    AnotherFunc(a);
    // a.x is now 2
}

因为类是引用类型,所以我们知道我们正在向AnotherFunc传递一个现有的A实例(与复制的值类型不同)。

在C++中,我们使用指针来明确这一点:

代码语言:javascript
复制
class A
{
public:
    int x;
};

void AnotherFunc(A* a) // notice we are pointing to an existing instance of A
{
    a->x = 2;
}

void SomeFunc()
{
    A a;
    a.x = 1;

    AnotherFunc(&a);
    // a.x is now 2
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-03 07:40:23

“如何仅使用.NET或Java开发人员熟悉的概念来解释指针?”我建议确实有两件不同的事情需要学习。

第一个是如何使用指针和堆分配内存来解决特定问题。有了适当的风格,例如使用shared_ptr<>,这可以以类似于Java的方式来完成。shared_ptr<>与Java对象句柄有许多共同之处。

然而,其次,我认为指针通常是一个根本较低级别的概念,Java和较小程度的C#故意隐藏。在C++中编程而不移动到那个级别肯定会有一大堆问题。您需要从底层内存布局的角度考虑,并将指针视为指向特定存储部分的指针。

试图从更高的概念来理解这个较低的层次将是一条奇怪的道路。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5174725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档