作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
情况是我有一个数组 struct
tree_t tree[MAXTREES];
for(int i = 0; i < MAXTREES; i++) {
tree_t *tptr = tree + i;
// ...
}
int num;
num = tree[i].node[j].left; // could be like this
num = tptr->node[j].left; // but I am using this
num = tree->node[j].left;
#include <stdint.h>
#define MAXLEAFS 16384
#define MAXTREES 15262
typedef struct {
int16_t left;
int16_t right;
} leaf_t;
typedef struct tree_t {
leaf_t node[MAXLEAFS];
int spudbase;
int root;
int width;
int spudics;
struct tree_t *nextree;
} tree_t;
tree_t tree[MAXTREES];
int main(void)
{
for(int i = 0; i < MAXTREES; i++) {
tree_t *tptr = tree + i;
for (int j = 0; j < MAXLEAFS; j++) {
int num;
num = tree[i].node[j].left; // could be like this
num = tptr->node[j].left; // but I am using this
num = tree->node[j].left; // this is my bug
}
}
}
struct
的指针避免在此处嵌套数组索引:
tree[index].spudics = tree[index].node[tree[index].root].left +
tree[index].node[tree[index].root].right;
tptr->spudics = tptr->node[tptr->root].left + tptr->node[tptr->root].right;
最佳答案
这是一个可以避免的问题。如果你重写它以使用迭代器指针,你会得到这样的代码:
int main(void)
{
tree_t *tptr = tree;
for (int i = 0; i < MAXTREES; ++i, ++tptr) {
leaf_t *leaf = tptr->node;
for (int j = 0; j < MAXLEAFS; ++j, ++leaf) {
int num = leaf->left;
}
}
}
leaf[j].left
之类的事情。意外地。正确的代码看起来很简单。不正确的代码看起来已损坏。
关于c - 有没有办法警告这个指针错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60010338/
我是一名优秀的程序员,十分优秀!