c - 前进到指针数组的开头
问题描述
我正在尝试使用索引返回到指针数组的开头,但是遇到了一些困难。这是我到目前为止所拥有的:
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);
}
在收集了关于指针超出其初始位置多远的“偏移”信息之后,我如何将指针“恢复”到那个确切位置?
解决方案
你一直在调整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);
}
推荐阅读
- android - 没有 UI 的 Android 应用程序:如何在每次运行应用程序时停止瞬时闪烁
- react-native - 反应原生如何保存从图像选择器包中挑选的图像
- excel - 一个条件格式宏覆盖另一个
- docker - 从 mac os 部署到 linux/docker 生产主机的映像位置是什么?
- node.js - Content-Security-Policy 不会在 React 中从外部源加载图像
- azure - 如何在 Visual Studio 2019 窗口中创建的 Mac 上的 Visual Studio Code 中本地运行多个 C# Az 函数应用程序?
- java - spring-boot EntityListener,应用上下文中一些bean的依赖形成一个循环
- java - Spring Boot 在控制器 api 上出现 404 错误
- mysql - MariaDB:group by 不计算条目
- kdb - kdb:在变量列表上调用 parse