gpt4 book ai didi

c - 为什么这个指针操作不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:23 25 4
gpt4 key购买 nike

所以我有一个链表数组

node* x = (node*) malloc(sizeof(node) * 500);

现在我想插入到这个列表中

int value;
value = 50;
node* ins;
ins = (node*) malloc(sizeof(node));
ins->val = value;
ins->next = &x[20];
&x[20] = ins;

我得到的错误; 1值需要作为赋值的左操作数

如果您想查看节点结构

typedef struct node {
int val;
struct node* next;
} node;

为什么这样的东西行不通?我想学习:D

编辑:错误指向这一行

&x[20] = ins;

最佳答案

这里的问题是,当您编写 &x[20] 时,您将返回数组 x 的第 20 个元素的地址。一旦创建了数组 x,就无法更改其元素在内存中的位置。您可以更改数组元素的内容,但这些元素所在的位置不会改变。因此,编写 &x[20] = ins 是非法的,因为对该语句最自然的解释是“将 x 的第 20 个元素移动到插入。”

另一方面,代码 x[20] = ins 更好(但它仍然存在问题)。这意味着“更改数组 x 的第 20 个元素的内容,以保存存储在 ins 中的地址。”请记住,“存储在 x[20] 中的地址”(由 x[20] 给出)和“地址 of x[20]”,由 (&x[20]) 给出。

该行代码的问题在于 x[20] 的类型为 nodeins 的类型为 node*。您的意思是使 x 成为 node**(指向 node* 数组的指针吗?如果您进行了更改,那一行应该编译。

从技术上讲,这里的问题是寻址运算符返回一个右值,但您只能将左值放在赋值语句的左侧.右值是像 137 或“hello”这样的值,从某种意义上说,它代表一个“纯值”,它不是您可以放置​​某些东西的某个地方的名称。像 137 = x 这样的写法是不合法的,因为你不能将 x 存储在 137 中,就像写 &x[20] = ins 一样 是不合法的,因为您不能将 ins 存储在 &x[20] 中。

关于c - 为什么这个指针操作不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42119564/

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