首页 > 解决方案 > 是否可以通过引用第 n+1 个元素找到数组末尾的地址?

问题描述

我需要知道指针何时穿过整个数组 -> 位于它后面的第一个位置。c中的示例代码:

unsigned int ar[10];
char *pointer = (char*) ar;
while(pointer != (char*) &ar[10]){
*pointer++ = 0xff
}

此示例是否可以将数组的每个元素设置为 0xffffffff?

标签: arrayscpointersarray-pointer

解决方案


原理是正确的,但是您忘记初始化指针并在错误的位置递增它。而是使用

unsigned int ar[10];
unsigned char *pointer = (unsigned char *)ar;
unsigned char *end = (unsigned char *)&ar[10];
while (pointer != end) { 
    *pointer++ = 0xff;
}

如果您在比较中增加指针,那么您将不会设置第一个字节并将写入一个字节超出限制。

但永远不要重新发明轮子。<string.h>为此有一个功能:

unsigned int ar[10];
memset(ar, 0xff, 10 * sizeof (int));

// or if a static array,
memset(ar, 0xff, sizeof ar);

另一方面,如果您真的想将unsigned ints 设置为 UINT_MAX,那么您可以明确:

for (size_t i = 0; i < 10; i++) {
    ar[i] = UINT_MAX; // or you could use `-1` as well, as it is guaranteed to result in `UINT_MAX` after conversion.
}

推荐阅读