首页 > 解决方案 > 前进到指针数组的开头

问题描述

我正在尝试使用索引返回到指针数组的开头,但是遇到了一些困难。这是我到目前为止所拥有的:

void free_x (char **strings, const int free_outer_array)
{
    int pointer_offset=0;
    while (*strings) { 
        pointer_offset ++;
        free (*strings); 
        *strings++ = NULL;
    }

    *strings = *(strings-pointer_offset); // this line?
    if (free_outer_array)
        free(strings);

}

在收集了关于指针超出其初始位置多远的“偏移”信息之后,我如何将指针“恢复”到那个确切位置?

标签: c

解决方案


你一直在调整strings(用strings++),所以你的意思是调整strings回来,而不是*strings

strings = strings - pointer_offset;

但是保存原始值或使用不同的变量循环会更简单。

void free_x (char **strings, const int free_outer_array)
{
    char **p = strings;

    while (*p) { 
        free(*p); 
        *p++ = NULL;
    }

    if (free_outer_array)
        free(strings);
}

推荐阅读