导致段错误:
int n;
int *variable = scanf("%d",&n);
printf("Printing :%d",*variable);
没问题:
int n;
scanf("%d",&n);
int *variable = &n;
printf("Printing :%d",*variable);
如何在没有段错误的情况下实现第一个?
最佳答案
假设 scanf
成功,它返回 1(通常它返回已设置的变量数量)。
在第二个片段中,您丢弃了该(有用)信息,并将指针 varaible
设置为指向 n
的地址,这是完全有效的。 (如果 scanf
返回 0,则 n
将未初始化,并且 printf
调用的行为未定义。)
在第一个代码段中,根据返回值设置指向 int
常量 0
或 1
的指针 scanf
的值。这也很好,但是取消引用该指针的行为
*variable
未定义。
如果您想要华丽,并与代码审阅者进行热烈的对话,您可以使用表达式分隔符并编写
int n;
int *variable = (scanf("%d",&n), &n);
但这很顽皮,因为您再次丢弃了 scanf
的返回值,并且 n
可能未初始化。
关于c - 如何动态地将值从地址分配给指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823955/