gpt4 book ai didi

c - 结构点作为函数 C 的参数

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

我有几个月才开始用 C 编程,但我现在发现自己有疑问,例如,让我们看下一个示例代码:

    typedef struct
{
char *var1;
}myFooStruct;

myFooStruct struct1 [ 200 ];

我怀疑我会得到什么 **struct1, &struct1, *struct1, struct1,当我将结构传递给一个采用二维指针 ( **myFooStruct ) 的函数时,我对指针有基本的了解1-但我发现自己对结构指针感到困惑,2-如何修改结构如果我将它作为参数传递给函数

如果有其他类似的问题请在这里发帖,我找不到类似的,如果你知道一些讲座我也欢迎阅读,非常感谢!

最佳答案

* 是一个取消引用运算符 - 将其视为“位置 xyz 中包含的值”。

& 是一个引用运算符 - 将其视为“变量 xyz 在内存中的位置”。

因此:

myFooStruct struct1 是一个物理结构 - 这是实际的对象。

&struct1 相当于 struct1 在内存中的位置 - 这通常是一个地址(如 0xf0004782)。您通常会在通过引用传递(有关更多信息,请参阅维基百科)或分配给指针(字面上指向内存中的位置 - 了解它)时使用它?)。

*struct1 取消引用 struct1 - 也就是说,它返回位置 struct1 中包含的值。在您给出的示例中,这是无效的,因为struct1 不是指向内存中某个位置的指针。

**struct1 很棘手 - 它返回包含在 struct1 中的位置的值。换句话说:struct1 指向内存中的某个位置。在那个位置是内存中另一个位置的地址!将其视为寻宝游戏 - 您前往一个地点,找到线索,然后沿着线索前往另一个地点。


至于如何访问结构:将结构想象成一个盒子。当您将盒子放在面前时,只需打开它并查看里面的内容即可。在 C 语言中,我们使用 . 运算符来做到这一点:

char *my_var = struct1.var1

当你面前没有盒子时——也就是说,你有一个指向结构的指针——你需要先访问盒子所在的位置,然后才能查看里面的内容。在 C 中,我们有一个快捷方式 - -> 运算符:

myFooStruct *pointer_to_struct1 = &struct1
char *my_var = pointer_to_struct1->var1
//NOTE: the previous line is equivalent to:
// char *my_var = (*pointer_to_struct1).var1

关于c - 结构点作为函数 C 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569052/

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