Closed. This question needs to be more focused. It is not currently accepting answers. Learn more。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
6年前关闭。
所以很多人(包括我自己)都会对指针感到困惑。我知道它们是如何工作的,但是当我做一个应用程序或者其他什么的时候……我怎么知道什么时候最好使用它们呢?
是否有一个通用的规则/指南来说明什么时候使用它们是一个好主意。我觉得我基本上理解他们的概念,但总是在想我应该在这里还是那里使用指针等等。。。
谢谢您。
您不需要修改提供的值,而且您只访问简单的值,而不是数组或复杂结构。
现在,如果要修改大型数组的内容,特别是如果数组的大小可以在运行时更改(即:链接列表和其他数据结构),则需要指针period。如果要修改多个值,可以使用指针,也可以只使用函数的返回值(即:
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
6年前关闭。
所以很多人(包括我自己)都会对指针感到困惑。我知道它们是如何工作的,但是当我做一个应用程序或者其他什么的时候……我怎么知道什么时候最好使用它们呢?
是否有一个通用的规则/指南来说明什么时候使用它们是一个好主意。我觉得我基本上理解他们的概念,但总是在想我应该在这里还是那里使用指针等等。。。
谢谢您。
最佳答案
它们是C语言的基本部分。我不觉得粗鲁,但我认为关键是要考虑的是,它们是不可避免的。它们是另一个你可以使用的工具,也是一个强大的工具。
一般来说,当您想要访问大量数据(如:数组、大型结构、动态内存分配等)时使用它们。它们在设计api(应用程序编程接口)时也非常有用。这不应该是C问题,如在C和C++中,你可以通过值或引用传递,并且你的问题的性质基于通过值或引用传递的有用性,以及用户访问函数、类等外部数据的其他手段。
Pass by Reference / Value in C++
如果您只需传递值,并且该值是只读的,那么没有指针就可以了,因为您无法更改该值。常见的情况是一个简单的求和函数:
int sum (int a, int b) {
int value = a + b;
return value;
}
您不需要修改提供的值,而且您只访问简单的值,而不是数组或复杂结构。
现在,如果要修改大型数组的内容,特别是如果数组的大小可以在运行时更改(即:链接列表和其他数据结构),则需要指针period。如果要修改多个值,可以使用指针,也可以只使用函数的返回值(即:
int mysum = sum(1,2);
)。在常规工作中使用指针时,我遇到的唯一问题是确保在每个函数的开头检查任何可能的空指针值。真正的问题是,在处理较大的项目时,您可以从写得不好的第三方API或库中获取非空、无效/损坏的指针。这才是真正有趣的开始,使用JTAG调试器、GDB等进行调试。