new*_*bie 1 c pointers dereference
我正在尝试测试->运算符,但我似乎无法做到这一点,因为当我执行以下程序并使用流提供输入时,程序停止工作.
注1:我在编译之前收到警告,它说:
格式'%s'需要'char*'类型的参数,但参数2的类型为'int'[-Wformat =]
注2:如果我省略该行printf("%s\n", *(&home1)->name ),它就可以正常工作,并实际打印我写的任何内容.
#include <stdio.h>
#include <string.h>
typedef struct home_type {
char name[30] ;
}home;
int main (void) {
home home1 ;
char name[30] ;
scanf ("%[^\n]%*c", name);
strcpy( home1.name, name) ;
printf("%s\n", home1.name ) ;
printf("%s\n", *(&home1)->name ) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
删除*,它的工作原理.代码*(&home1)->name类似于*(home1.name)代替例如通过指针的第一个字符的,它通过所述第一值char中name; 由于默认参数促销,该值被转换为int.
从而:
printf("%s\n", (&home1)->name );
Run Code Online (Sandbox Code Playgroud)
应该管用; 但是你不需要->这里; ->现在只是更方便地使用指针结构的快捷方式; 即(*ptr).name变得更加美味ptr->name; 因为home它已经是一个struct而不仅仅是指向struct的指针,你应该使用它..