首页 > 解决方案 > c struct,2 个变量赋值类型

问题描述

为什么在函数 use_struct() 中将“num”分配给 my_struct 和 my_confusing 不同?就此而言,为什么我使用“。”将“num”分配给 my_struct。&“->”符号?这一定是因为范围,但我在这两个地方都没有提到结构吗?main 中的 my_struct 与 use_struct() 中的 my_struct 有什么区别?

#include<stdio.h>

struct Test{
    int num;
};

void use_number(struct Test my_struct){

    // is VALUE therefore "."
    my_struct.num = 99999; 
    printf("inside use number the value is %d\n", my_struct.num);
    // this takes in a COPY of structure, cannot modify orig 

}

void use_struct(struct Test *my_struct){
    // take in a pointer to test, 
    // here I CAN CHANGE THE VALUE OF TEST
    // HAVE POINTER THEREFORE "->"
    my_struct->num +=1;
    printf("inside use_struct the value is %d\n", my_struct->num);

    struct Test confusing ;

    confusing.num = 88888; 
    printf("here you assign a number differently to my_confusing %d \n",     confusing.num);

    printf("Why do assignment of num to my_stuct and confusing differ");
}

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

    struct Test my_struct;

    my_struct.num = 5;
    printf("Begin as %d\n", my_struct.num);

    // Pass in the ACTUAL THING
    use_struct(&my_struct);
    printf("after use_struct: %d\n", my_struct.num); // dot here b/c you want to print the NUMBER, not the box that contains it 

    // pass in a COPY
    use_number(my_struct);
    printf("after use number %d\n", my_struct.num);

    return 0;

}

标签: cpointersstructvariable-assignment

解决方案


在你的主要功能中。您使用 (.) 为结构赋值。在 main (my_struct) 中是局部变量。你通过引用你的函数(use_struct)。使用 & 你发送到 func 结构的唯一地址。所以在你的 use_struct 函数中你必须取消引用它。

my_struct->num 等价于 (*my_struct).num

然后在你的函数中创建新的结构 my_confusion。这个结构是一个局部结构。它不是指向结构的指针,因此在函数结束后它消失了。尝试在 main 中使用 my_confusion 做一些事情。您将收到一个错误,因为未声明此结构。

所以在 use_struct func

my_struct 是指针,用于访问您使用的元素 -> my_confusion 是在 func 中创建的本地结构。并访问您使用的元素。

你可以在这里学习矿石https://www.programiz.com/c-programming/c-structures-pointers


推荐阅读