gpt4 book ai didi

c - 如何测试指针是否在数组内?

转载 作者:行者123 更新时间:2023-12-04 15:32:04 28 4
gpt4 key购买 nike

我想测试 myCurrentPtr 是否指向我的数组 a 内。

_B表示a中值的个数。
所以,a + _B 应该指向数组的最新值。

#define _B ((uint8_t)5)
volatile uint8_t a[5] = {0, 1, 2, 3, 4}; //`a` is a pointer to the first array element

if (myCurrentPtr > (a + _B)) {
printf("Out of bounds!");
}

不编译。你有什么想法吗?

鉴于,

...
if (myCurrentPtr > (a + 5)) {
printf("Out of bounds!");
}

编译得很好。

预处理后两者不完全一样吗?

最佳答案

How to test if pointer inside an array?

代码可以使用>=, >, <, <=在两个对象指针之间 p,q它们是否在同一个数组中(或者只是一个通过了数组的末尾)。否则代码是未定义的行为。 C 没有可移植的方法来测试数组内部/外部。

下面的代码很差

if (myCurrentPtr == (a + _B)) {                            // Defined behavior
printf("pointer just passed a[]\n");
} else if (myCurrentPtr >= a && myCurrentPtr < (a + _B)) { // Undefined behavior
printf("pointer in array\n");
} else {
printf("pointer outside array\n");
}

代码可以一次明确地比较一个 ==, !=myCurrentPtra[] 的每个元素.这可能慢得令人不满意,但可靠。

// Dependable, well defined, but slow.
found = false;
for (int i=0; i<5; i++) {
if (myCurrentPtr == &a[i]) {
found = true;
break;
}
}

其他方法依赖于不确定的代码。

// Iffy code - depending on memory model, may work, may not.
uintptr_t mcp = (uintptr_t) myCurrentPtr;
uintptr_t ia = (uintptr_t) a;
uintptr_t ia5 = (uintptr_t) &a[5];

if (mcp >= ia && mcp < ia5) { // Not highly portable
printf("pointer in array\n");
} else {
printf("pointer just passed a[]\n");
}

“如何测试指针是否在数组内?”的最佳方法是重新成型的问题。 OP 没有发布为什么需要这个测试。好的代码通常可以重新解决问题而不使用此测试。

关于c - 如何测试指针是否在数组内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069257/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com