【发布时间】:2021-08-18 17:53:47
【问题描述】:
使用指针构建和访问通用数据结构 元素的大小不固定的地方(因此不能 使用结构)。
有趣的一点在于递增void * 指针
被转换为 int * 以指向下一个 int。
第一个错误的方法是:
// I want to assign -1 to the two int elements the memory
// is pointing to
*(int *) next++ = -1;
*(int *) next = -1;
这是错误的,因为 next++ 确实增加了 1。
可能有不止一个错误混淆运算符 优先级并假设要完成增量...无论如何...
即使拆分操作也不会增加:
*(int *) next = -1;
(int *)next++; // does increment by one, maybe ++ comes before casting?
*(int *) next = -1;
工作示例是:
*(int *) next = -1;
next = (int *)next + 1; // this increments by 4 as wanted
*(int *) next = -1;
但这让我有点困惑,因为我看不出有什么不同 所以我想我缺少一些语法规则 也许你们中的一些人可以给我一个提示!
【问题讨论】:
-
跳过强制转换,分配给
int*变量开始,然后改为。 -
C 还是 C++?不同的语言。
-
目前我正在使用 C
-
我同意第一条评论。如果你知道变量类型是
int *,那么更好的代码就是一有机会就转换成int *,而不是像这样到处写转换。int *ptrNext = (int *)next;并简单地使用ptrNext。 -
@piertoni - 前段时间我也做了学习部分,我为自己做出的结论(主要是从经济学的角度来看)是让代码比它必须的更愚蠢并使用括号指定表达式所需的优先级。因此,我之前的评论和道歉听起来太直接了,并不是故意的。
标签: c++ c pointers operator-precedence