c - 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;
}
解决方案
在你的主要功能中。您使用 (.) 为结构赋值。在 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
推荐阅读
- cs-cart - 有没有办法在我们升级主题的同时,主题定制不会改变?
- vim - 如何在vim中制作ctr del?
- angular - 使用 .toBeTruthy() 测试函数时,预期在 Karma 单元测试中定义未定义错误
- python - 即使我得到了变量值,我也得到了一个错误(python)
- sdn - Ryu 控制器没有链接
- here-api - 是否可以通过查询 HERE REST-API 获取 EV 充电站的位置数据?
- android - 如何绘制箭头而不是拖动阴影?
- javascript - JQuery 添加类后添加另一个类并且可见
- gdb - 使用 GDB 和 LLDB 在 D 代码中命中代码行断点的问题
- javascript - Node.js:无法读取未定义的属性“then”(嵌套查询)