C语言 在不初始化的情况下将scanf与指针一起使用有什么问题



scanf需要一个指针参数。为什么我们不能传递指针变量?

int* x;
scanf("%d", x);
printf("%d", *x);

这不会给出输出。.为什么?怎么了?

scanf%d格式说明符需要一个指向int的指针,即一个int *,这就是你要传递的。 因此,您正确调用了该函数。

出错的地方是指针x从未初始化,因此不会指向任何地方。 然后,scanf尝试将此单位化值读取为地址,并随后读取该虚假地址上的内容。 读取未初始化的值会调用未定义的行为。

您需要通过为其分配int变量的地址或使用malloc动态分配内存来指出x

int a;
int *x = &a;

或:

int *x = malloc(sizeof(int));

最新更新