gpt4 book ai didi

c - C中指向结构和数组的指针

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:22 27 4
gpt4 key购买 nike

问题基于以下代码:

struct t
{
int * arr;
};
int main()
{
struct t *a = malloc(5*sizeof(struct t));
a[2].arr = malloc(sizeof(int));//line 1
a[2].arr[1] = 3; //line 2
}
  1. 在第 2 行中,我使用 .(点)运算符而不是 -> 运算符访问数组 arr。为什么这样做有效?
  2. 当我将第 2 行重写为 (a+2)->arr[1] = 3 时,这有效。但是如果我把它写成 (a+2)->(*(arr+1)) = 3 我会收到一条消息作为 expected identifier before '(' token。为什么会这样?

最佳答案

  1. 对于第 1 行,点运算符在这种情况下有效,因为数组访问会为您解除对指针的引用。 *(a+2) == a[2].这两个在值和类型上都是等价的。

  2. “->”运算符,需要在它后面有一个标识符,特别是右参数必须是左参数类型的属性。仔细阅读消息,它真的只是在提示你使用括号。 (使用 . 运算符代替的示例:a[2].(arr) 无效,a[2].arr 只是花花公子。)

    <

此外,如果我们可以从您的代码中推断出含义,尽管它存在编译错误,但也存在与内存相关的运行时问题的可能性。

关于c - C中指向结构和数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656115/

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