Questions tagged «pointers»

“指向”存储在内存中的另一个值的数据类型。指针变量包含某个其他实体(变量或函数或其他实体)的内存地址。此标记应用于涉及使用指针而不是引用的问题。使用指针的最常见的编程语言是C,C ++,Go和汇编语言。使用特定的语言标签。其他有用的标记是描述指针用法的方法,函数,结构等。


6
数组的地址如何等于C中的值?
在下面的代码位中,指针值和指针地址与预期的不同。 但是数组值和地址不行! 怎么会这样? 输出量 my_array = 0022FF00 &my_array = 0022FF00 pointer_to_array = 0022FF00 &pointer_to_array = 0022FEFC #include <stdio.h> int main() { char my_array[100] = "some cool string"; printf("my_array = %p\n", my_array); printf("&my_array = %p\n", &my_array); char *pointer_to_array = my_array; printf("pointer_to_array = %p\n", pointer_to_array); printf("&pointer_to_array = %p\n", &pointer_to_array); printf("Press ENTER to …
189 c  pointers  arrays 

13
C并不那么难:void(*(* f [])())()
我今天刚看一张照片,并认为我会感谢您的解释。所以这是图片: 我感到困惑,并想知道这样的代码是否可行。我用图片搜索了一下,然后在此 reddit条目中找到了另一张图片,这是该图片: 因此,这种“螺旋式阅读”是否有效?这是C编译器解析的方式吗? 如果对这个怪异的代码有更简单的解释,那就太好了。 除此以外,这类代码是否有用?如果是这样,何时何地? 关于“螺旋规则” 存在一个问题,但我不仅在询问它的应用方式或如何使用该规则读取表达式。我也质疑这种表达方式的使用以及螺旋规则的有效性。关于这些,已经发布了一些不错的答案。


2
为什么“ this”是指针而不是引用?
我在阅读有关C ++优缺点的问题的答案,并在阅读注释时遇到了疑问。 程序员经常发现“ this”是一个指针而不是一个引用令人困惑。另一个困惑是为什么“ hello”不是std :: string类型,而是求值为char const *(指针)(在数组到指针的转换之后)– Johannes Schaub-litb 08年12月22日在1:56 这仅表明它没有使用与其他(后来的)语言相同的约定。– le dorfier 08年12月22日在3:35 我将“这个”事情称为一个非常琐碎的问题。糟糕,感谢您在我的未定义行为示例中发现了一些错误。:)尽管我不了解有关尺寸的信息与第一个信息有关。完全不允许指针指向已分配的内存之外– jalf 08年12月22日在4:18 这是持续不断的痛苦吗?– yesraaj 08年12月22日下午6:35 如果方法是const int getFoo()const,则它可以是常量。<-在getFoo的范围内,“ this”是常量,因此是只读的。这样可以防止错误,并为调用者提供一定程度的保证,即该对象不会更改。– Doug T. 08年12月22日在16:42 您不能重新分配“此”。即您不能执行“ this =&other;”,因为这是一个右值。但这是T *类型,而不是T const类型。即它是一个非恒定指针。如果您使用的是const方法,则它是指向const的指针。T常量 但指针本身是非常量– Johannes Schaub-litb 08年12月22日在17:53 可以这样想“ this”:#define this(this_ + 0),其中编译器创建“ this_”作为指向对象的指针,并使“ this”成为关键字。您不能分配“ this”,因为(this_ + 0)是一个右值。当然不是这样的(没有这样的宏),但是它可以帮助理解它– Johannes Schaub-litb …



29
人们对C指针有什么困难?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心寻求指导。 7年前关闭。 从这里发布的问题数量来看,很明显,人们在使用指针和指针算术时会遇到一些根本性的问题。 我很好奇为什么。它们从未真正给我造成重大问题(尽管我是在新石器时代第一次了解它们的)。为了对这些问题写出更好的答案,我想知道人们发现困难之处。 因此,如果您在使用指针时遇到困难,或者您最近却突然“明白了”,那么指针的哪些方面导致了您的问题?
172 c  pointers 


6
在C语言中,为什么有人在释放指针之前将其转换?
我正在使用旧的代码库,几乎所有对free()的调用都在其参数上使用了强制类型转换。例如, free((float *)velocity); free((float *)acceleration); free((char *)label); 其中每个指针具有对应的(和匹配的)类型。我认为这样做根本没有意义。这是很旧的代码,所以我想知道这是否是K&R的东西。如果是这样,我实际上希望支持可能需要这样做的旧编译器,因此我不想删除它们。 使用这些演员表是否有技术原因?我什至看不出有很多实用的理由来使用它们。在释放数据之前提醒自己数据类型有什么意义? 编辑:这个问题不是另一个问题的重复。另一个问题是该问题的特例,如果亲密的选民会阅读所有答案,我认为这是显而易见的。 Colophon:我给“常量答案”打了勾号,因为这是可能需要这样做的真实理由。但是,关于它是ANSI C之前的自定义(至少在某些程序员中)的答案似乎是在我的情况下使用它的原因。许多人在这里有很多优点。感谢你的贡献。
167 c  pointers  casting 

10
我应该将整个对象还是指向对象的指针存储在容器中?
从头开始设计新系统。我将使用STL来存储某些长期存在的对象的列表和地图。 问:我应该确保我的对象具有副本构造函数并将对象的副本存储在我的STL容器中,还是通常更好地自己管理生命和作用域并仅将指向这些对象的指针存储在我的STL容器中? 我意识到这在细节上有些欠缺,但是我正在寻找“理论上”更好的答案(如果存在),因为我知道这两种解决方案都是可行的。 使用指针有两个非常明显的缺点:1)我必须在超出STL的范围内自己管理这些对象的分配/取消分配。2)我不能在堆栈上创建一个临时对象并将其添加到我的容器中。 还有什么我想念的吗?
162 c++  stl  pointers 

8
为什么C ++库和框架从不使用智能指针?
我读过几篇文章,几乎不应该使用原始指针。相反,它们应始终包装在智能指针中,无论是作用域指针还是共享指针。 但是,我注意到Qt,wxWidgets之类的框架以及Boost之类的库从不返回也不期望有智能指针,就好像它们根本没有使用它们一样。相反,它们返回或期望原始指针。有什么理由吗?编写公共API时,我应该远离智能指针吗?为什么? 只是想知道为什么在许多大型项目似乎都避免使用智能指针的情况下建议使用智能指针。

8
使用C返回数组
我是C语言的新手,我需要一些处理数组的方法的帮助。来自Java编程,我习惯于说int [] method()可以返回一个数组。但是,我发现使用C时,必须在返回数组时使用数组指针。作为一个新的程序员,即使在我浏览过许多论坛的情况下,我也完全不理解这一点。 基本上,我试图编写一个返回C语言中的char数组的方法。我将为该方法(让其称为returnArray)提供一个数组。它将根据先前的数组创建一个新数组,并返回指向它的指针。我只需要一些有关如何启动它以及如何将指针从数组中发送出去后如何读取指针的帮助。任何帮助解释这一点表示赞赏。 数组返回函数的建议代码格式 char *returnArray(char array []){ char returned [10]; //methods to pull values from array, interpret them, and then create new array return &(returned[0]); //is this correct? } 函数的调用者 int main(){ int i=0; char array []={1,0,0,0,0,1,1}; char arrayCount=0; char* returnedArray = returnArray(&arrayCount); ///is this correct? for (i=0; …
152 c  arrays  pointers  char 

12
为什么x [0]!= x [0] [0]!= x [0] [0] [0]?
我正在学习一些C ++,并且正在与指针作斗争。我知道我可以通过声明以下三个级别的指针: int *(*x)[5]; 因此,这*x是指向5个元素的数组的指针,这些数组是的指针int。我也知道x[0] = *(x+0);,x[1] = *(x+1)等等。 那么,鉴于上述声明,为什么x[0] != x[0][0] != x[0][0][0]?
149 c++  c  arrays  pointers 

17
const指针的意义是什么?
我不是在谈论const值的指针,而是const指针本身。 我在学习C和C ++的基础知识之外,直到今天,我才意识到指针是通过值传递给函数的,这很有意义。这意味着在函数内部,我可以使复制的指针指向其他某个值,而不会影响调用者的原始指针。 那么,有一个函数标头说: void foo(int* const ptr); 在这样的函数中,您不能使ptr指向其他东西,因为它是const并且您不希望对其进行修改,而是这样的函数: void foo(int* ptr); 工作也一样!因为无论如何都会复制指针,并且即使您修改了副本,调用者中的指针也不会受到影响。那么const的优点是什么?
149 c++  c  pointers  const 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.