Emi*_*ard 0 c struct pointers function-parameter
我和我的朋友在我们的代码中使用结构(我们的代码彼此分开).让我们举个例子:
struct Book {
char title;
int pages;
}
void setBook(struct Book *tempBook) {
tempBook->title = "NiceTitle";
tempBook->pages = 50;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码很简单.问题是,拥有这两个主电源是否有任何区别:
int main() {
struct book obj1;
setBook(&obj);
}
Run Code Online (Sandbox Code Playgroud)
要么
int main() {
struct Book *obj2;
setBook(obj2);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的发言中并不清楚.我已经把品酒初始化了
struct Book *obj2 = malloc(sizeof(struct obj2));
Run Code Online (Sandbox Code Playgroud)
的情况下
struct book obj1;
setBook(&obj);
Run Code Online (Sandbox Code Playgroud)
您将有效地址#1传递给函数,因此定义了行为.
另一方面,
struct Book *obj2;
setBook(obj2);
Run Code Online (Sandbox Code Playgroud)
你正在传递一个单元化的指针#2,访问它会调用未定义的行为.
也就是说,成员char title;应该char *title;作为字符串文字,当用作初始化器时,衰减到指向第一个元素的指针,因此你需要在LHS上有一个指针.
#1 - obj1是一个自动局部变量,该变量的地址是作用域中的有效地址.
#2 - struct Book *obj2;定义一个指针,再次obj2作为一个自动局部变量,它不会被隐式初始化为任何东西.因此,初始值(即指针指向的内存地址)是不确定的,并且非常无效.