C结构在使用前初始化吗?
C structure initialization before using it?
我不明白为什么我必须在使用它之前初始化我的结构,我在我的代码中遇到这个错误,我知道如果我使用指针或如果我初始化结构成员它可以工作,但为什么它不起作用这样 ?
#include <stdio.h>
typedef struct human{
char name[20];
int age;
} student;
void function(student ){
printf("It's not working");
}
int main(){
student a;
function(a);
return 0;
}
我明白了
调试错误!
文件:运行 - 时间检查失败 #3 - 正在使用变量 'a',但未进行初始化。 (按重试调试应用程序)
而且我没有从我的函数输出消息
您收到此错误,因为您的调试器检测到您正在向函数发送单元化变量。它不知道,你将在函数内部用它做什么,所以它会警告你。你可以看到,如果你 运行 程序在 release 中,不会发生错误。对你来说最简单的解决方案,如果你知道,你最近将它初始化为正确的值,就是在创建 student a = {0};
时初始化它
您正在按值将对象 a
传递给 function
。由于 C 具有 only 值语义,因此在这种情况下它只能复制值。因此,您使用单元化对象初始化参数(即使您的实现不关心参数),这需要从该对象中读取。这是未定义的行为,因此编译器会通知您您正在做一些非法的事情。
如果你通过指针传递对象,你仍然是按值传递,但被复制的值是指针。因此您不必读取实际值,您的编译器也不会抱怨。
观察:
void flat(student s) {
s.age = 20;
}
void ptr(student* s) {
s->age = 20;
}
int main() {
student s = {"Eve", 0};
// { s.age == 0 }
flat(s);
// { s.age == 0 } --- still the same, no change
ptr(&s);
// { s.age == 20 } --- now it has changed
}
我不明白为什么我必须在使用它之前初始化我的结构,我在我的代码中遇到这个错误,我知道如果我使用指针或如果我初始化结构成员它可以工作,但为什么它不起作用这样 ?
#include <stdio.h>
typedef struct human{
char name[20];
int age;
} student;
void function(student ){
printf("It's not working");
}
int main(){
student a;
function(a);
return 0;
}
我明白了 调试错误! 文件:运行 - 时间检查失败 #3 - 正在使用变量 'a',但未进行初始化。 (按重试调试应用程序)
而且我没有从我的函数输出消息
您收到此错误,因为您的调试器检测到您正在向函数发送单元化变量。它不知道,你将在函数内部用它做什么,所以它会警告你。你可以看到,如果你 运行 程序在 release 中,不会发生错误。对你来说最简单的解决方案,如果你知道,你最近将它初始化为正确的值,就是在创建 student a = {0};
您正在按值将对象 a
传递给 function
。由于 C 具有 only 值语义,因此在这种情况下它只能复制值。因此,您使用单元化对象初始化参数(即使您的实现不关心参数),这需要从该对象中读取。这是未定义的行为,因此编译器会通知您您正在做一些非法的事情。
如果你通过指针传递对象,你仍然是按值传递,但被复制的值是指针。因此您不必读取实际值,您的编译器也不会抱怨。
观察:
void flat(student s) {
s.age = 20;
}
void ptr(student* s) {
s->age = 20;
}
int main() {
student s = {"Eve", 0};
// { s.age == 0 }
flat(s);
// { s.age == 0 } --- still the same, no change
ptr(&s);
// { s.age == 20 } --- now it has changed
}