问题标签 [pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1405 浏览

c++ - C中的这些声明有什么区别?

在 C 和 C++ 中,以下声明的作用是什么?

上述任何声明是否有误?

如果不是,它们之间的含义和区别是什么?

上述声明的有用用途是什么(我的意思是在什么情况下我们必须在 C/C++/嵌入式 C 中使用它们)?

0 投票
6 回答
20677 浏览

c - Malloc 错误:释放对象的校验和不正确

我正在为一项任务实施tail。我让它正常工作,但我似乎在随机时间免费收到错误。

我看不到,要追踪到一种模式或除此之外的任何东西是一致的。

例如,如果我将我的程序称为“tail -24 test.in”,我会在多次运行的同一行中得到不正确的校验和错误。但是,使用不同的文件,甚至不同的行数要打印回来,我会毫无错误地回来。

关于如何追踪问题的任何想法,我一直在尝试调试它几个小时,但无济于事。

这是有问题的代码:

lines 定义为 char** 并且 malloc 为:

0 投票
14 回答
46059 浏览

c - 如何从 C 中的指针获取数组的大小?

我分配了一个mystruct大小n如下的“数组”:

后来,我只能访问p,而不再拥有n。有没有办法确定仅给定指针的数组的长度p

我认为这一定是可能的,因为free(p)它就是这样做的。我知道malloc()跟踪它分配了多少内存,这就是它知道长度的原因;也许有办法查询这些信息?就像是...

我知道我应该重新编写代码以便我知道n,但如果可能的话我宁愿不这样做。有任何想法吗?

0 投票
11 回答
11519 浏览

objective-c - 通过指针算术访问数组值与 C 中的下标

我一直在读到,在 C 中,使用指针算法通常比下标访问数组更快。即使使用现代(据说是优化的)编译器也是如此吗?

如果是这样,当我开始在 Mac 上从学习 C 转向 Objective-C 和Cocoa时,情况是否仍然如此?

在 C 和 Objective-C 中,哪种是数组访问的首选编码风格?哪个(由各自语言的专业人士)认为更清晰,更“正确”(因为没有更好的术语)?

0 投票
6 回答
762 浏览

c - 涉及指针和数组的两个声明之间的区别

int *a[3]和 和有什么不一样int (*a)[3]

0 投票
4 回答
332 浏览

c - 我们可以在 C 中使用函数指针调用函数吗?

我们可以使用函数指针调用函数吗?如果是的话怎么办?

0 投票
7 回答
151539 浏览

c++ - 动态分配对象数组

我有一个包含动态分配数组的类,比如说

但现在我想为这些类创建一个动态分配的数组。这是我当前的代码:

但这炸得太厉害了。因为当循环迭代完成时(通过调用)创建的新A对象A(3)被破坏for,这意味着该myArray实例A的内部被delete []-ed。

所以我认为我的语法一定是非常错误的?我想有一些修复看起来有点矫枉过正,我希望避免:

  • A.
  • 使用vector<int>vector<A>所以我不必担心这一切。
  • 与其arrayOfAs成为一个A对象数组,不如让它成为一个A*指针数组。

我认为这只是一些初学者的事情,其中​​有一种语法在尝试动态分配具有内部动态分配的事物数组时实际上有效。

(此外,风格批评很受欢迎,因为我已经有一段时间没有使用 C++ 了。)

未来观众的更新:以下所有答案都非常有帮助。Martin 的被接受是因为示例代码和有用的“4 规则”,但我真的建议阅读它们。有些是错误的简洁陈述,有些则正确地指出了如何以及为什么vectors 是一个好方法。

0 投票
6 回答
55568 浏览

c - 将结构的指针/引用传递给函数

这听起来像是一个愚蠢的问题,但我还在学习 C,所以请多多包涵。:)

我正在编写 K&R(结构)的第 6 章,到目前为止,这本书已经取得了巨大的成功。我决定大量使用结构,因此在本章的开头用 point 和 rect 示例做了很多工作。我想尝试的一件事是canonrect通过指针更改函数(第 2 版,第 131 页)工作,因此返回void

我有这个工作,但遇到了一个小问题,我希望你们能帮助我。我想canonRect创建一个临时矩形对象,执行它的更改,然后将它传递给临时矩形的指针重新分配,从而简化代码。

但是,如果我这样做,矩形不会改变。相反,我发现自己手动重新填充了我传入的矩形字段,这确实有效。

代码如下:

所以这里有问题:

  1. 为什么不r = &temp;工作?(我认为这是因为我传入了引用而不是指针;我认为引用不可修改但指针是正确的吗?)
  2. 如果我尝试传递指向 的指针,为什么会出现非法间接编译时错误canonRect?(即,如果我有的话canonRect(*r);main()

我怀疑我已经知道#1 的答案,但#2 让我感到困惑——我认为传递指针是合法的。

无论如何...请原谅C新手。

0 投票
6 回答
3273 浏览

c++ - 将新节点添加到链表的新方法

上面给出的代码是在链表头部添加新节点的函数的普遍错误版本。通常正确的版本是这样的,

为此,我制定了另一个但简单的功能,效果很好。

但是我还没有看到在代码和教程中使用或讨论过这种方法,因此我很想知道这种方法是否存在缺陷。

0 投票
4 回答
3325 浏览

c - 指针和 const char[] 的 C 错误

我有一个我试图迭代的 const char arr[] 参数,

我收到一个错误:赋值从指针目标类型中丢弃限定符

const char [] 的处理方式与非常量不同吗?