c struct,2个变量赋值类型
c struct, 2 variable assigment types
为什么 'num' 到 my_struct 和 my_confusing 的赋值在函数 use_struct() 上不同?就此而言,为什么我同时使用“.”将 'num' 分配给 my_struct。 &“->”符号?这一定是因为作用域,但我不是在两个地方都引用了结构吗? main 中的 my_struct 与 use_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) 中是局部变量。你通过引用你的 func (use_struct)。使用 & 你发送到 func 结构的唯一地址。所以在你的 use_struct 函数中你必须取消引用它。
my_struct->num 等价于 (*my_struct).num
然后在您的 func 中创建新结构 my_confusion。这个结构是一个本地结构。它不是指向结构的指针,所以在函数结束后它就消失了。尝试在 main 中使用 my_confusion 做一些事情。你会得到一个错误,因为这个结构没有声明。
所以在use_struct func
my_struct 是指针,用于访问您使用的元素 ->
my_confusion 是在 func 中创建的本地结构。并访问您使用的元素。
你可以在这里学习矿石https://www.programiz.com/c-programming/c-structures-pointers
为什么 'num' 到 my_struct 和 my_confusing 的赋值在函数 use_struct() 上不同?就此而言,为什么我同时使用“.”将 'num' 分配给 my_struct。 &“->”符号?这一定是因为作用域,但我不是在两个地方都引用了结构吗? main 中的 my_struct 与 use_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) 中是局部变量。你通过引用你的 func (use_struct)。使用 & 你发送到 func 结构的唯一地址。所以在你的 use_struct 函数中你必须取消引用它。
my_struct->num 等价于 (*my_struct).num
然后在您的 func 中创建新结构 my_confusion。这个结构是一个本地结构。它不是指向结构的指针,所以在函数结束后它就消失了。尝试在 main 中使用 my_confusion 做一些事情。你会得到一个错误,因为这个结构没有声明。
所以在use_struct func
my_struct 是指针,用于访问您使用的元素 -> my_confusion 是在 func 中创建的本地结构。并访问您使用的元素。
你可以在这里学习矿石https://www.programiz.com/c-programming/c-structures-pointers