c - 从 C 中的指针列表中设置指针内容

标签 c pointers

我现在对指针感到非常困惑,所以我希望有人可以帮助我解决我犯错误的地方。

所以我想要一个指向某些结构的指针列表,以及一个具有指向所有结构的指针的变量。此列表还应稍后根据某些条件设置并更改这些条件。所以这里只是一个最小的例子:

typedef struct {
int a;

} path;

typedef struct {

path** all_paths;

} has_them;

int main(int argc, char** argv){

 path* eno = malloc(sizeof(path));
 path* second_path = malloc(sizeof(path));

 has_them* all = malloc(sizeof(has_them)); //this list should have all of my allocated path pointers
 all->all_paths = malloc(sizeof(path*)*10);
 all->all_paths[0] = eno; 
 all->all_paths[1] = second_path;

 printf("%p und %p\n", eno, second_path);
 printf("%p und %p\n", all->all_paths[0], all->all_paths[1]);

 all->all_paths[1] = NULL;

 printf("%p und %p\n", eno, second_path);
 printf("%p und %p\n", all->all_paths[0], all->all_paths[1]);

 return (EXIT_SUCCESS);
}

所以我的问题是,在我的方法中我只有 all 变量,并且我想使用这个变量来更改我的初始指针(此处为 eno 和 secondary_path),因此将它们设置为 NULL 例如。 但是当我像上面那样做时,第二条路径的初始指针不为空,但保持不变......

最佳答案

在此设置中,将 enosecond_path 设置为 NULL 的唯一方法是:

    eno = NULL;
    second_path = NULL;

无法使用 one 及其内部指针进行操作,因为 one 不包含有关变量的信息 eno第二路径。它仅包含 enosecond_path 也包含的内容的副本,即两个 malloc 结构的地址。修改副本对原件没有影响。

关于c - 从 C 中的指针列表中设置指针内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073829/

相关文章:

c - C 中的 strcpy 段错误

c - 分配和重新分配结构及其元素

C 函数和 char *

c++ - 无法将整数写入缓冲区内的偏移量 (char*)

c - 使用枚举定义单个值的优点? (C)

C - 使用 sscanf 忽略空格

c - 文件中的垃圾字符

c - 为什么我自己的幂函数在用于计算根时会返回错误的结果?

c - 从指针数组中删除指针

c - 我不明白指针在这段代码中是如何工作的?