2010-07-10 66 views
2

我想知道C和C++中的指针 - 它如何帮助节省内存?我搜查了但没有得到满意的答案。请帮助我。C/C++指针帮助

+7

请问您是否可以重新提出您的问题 - 因为它使我感到害怕或没有意义。 – 2010-07-10 15:27:53

+2

指针不存在以节省内存。他们让语言更具表现力,所以你可以做一些本来不可能的事情。 – jalf 2010-07-10 15:56:16

+12

我想知道我车里的方向盘。它如何帮助节省燃气?我搜查了但我没有得到满意的答案。请帮助我。 – 2010-07-10 15:57:29

回答

4

如果比较的代码下面两段:

foo() { 
    large_struct x; 
    bar(x); 
} 
bar(large_struct x) { 
    //do some funny things 
} 

foo() { 
    large_struct* x; 
    bar(x); 
} 
bar(large_struct* x) { 
    //do some funny things 
} 

在第一片,大结构x被在存储器中复制,而在第二代码段只是一个指针被复制到内存中。这是点,当你可以用指针节省内存。

+1

几乎完美。你应该提到,当函数退出时,释放的内存(在第一个例子中)将被释放,因为它被分配在堆栈上。所以,内存将只保存在堆栈级别。 – Poni 2010-07-10 15:38:33

+0

哦,当然是:) – levu 2010-07-10 15:45:52

+0

我们可以操作struct x的值,它会作为指针传递到foo()中。 然而,在第一种情况下,它不会。 – 2010-07-10 15:56:15

2

不确定你究竟在做什么,但是......存储指针比存储它指向的对象的整个副本的内存少。

1

除了其他人所说的,指针是必要的动态内存分配(这也适用于更高级别的语言,但是(通常)被抽象掉)。这意味着如果没有指针,你只能使用(通常相当小的)堆栈内存,这更需要保护。

0

指针基本上用于指向内存中的位置。指针的类型指的是它指向的内存类型(通常),例如:一个char *(字符指针指向一个内含字符的内存),这个指针的“类型”也与它有很大关系指针运算,例如:如果将一个整数添加到指针名称中,地址将会产生多少跳转字节。

在C++中,您可以使用new运算符在运行时声明系统内存。这种类型的内存称为动态内存,应该明确删除。指针表示法用于指向使用“new”运算符分配的此类内存。例如:

char * a = new char; 

char * a = new char[10] 

这种存储器必须使用删除关键字 例如被删除或返回到该系统:

delete a; 

delete [] a; 

它是se作为一名来自我们的C++程序员的实践,他们倾向于忘记删除这种声称的内存,因此托管语言应运而生。最受欢迎的是Java,C#和托管C++(C++ CLI)。 (看来,我可以写一篇关于什么指针的完整篇文章,但我试图指出你的问题)。

我希望你能满意我的答案。 我希望这可以帮助