可以在C编程中将指针传递给scanf参数吗?

Bwo*_*ods 1 c printf scanf

我目前正在研究一个C程序,我试图将指针作为参数传递给一个scanf.

例:

int main() { 
    int *num;
    scanf("%d", num);
    printf("%d", *num);
}
Run Code Online (Sandbox Code Playgroud)

考虑到scanf地址中存储值的典型传递,我不明白为什么它不能存储指针所保存的地址.我尝试运行此代码块时收到内存错误.可能是什么问题?

R S*_*ahu 10

只有在num指向有效内存时才能这样做.

// Not OK
// Leads to undefined behavior since num does not point
// to anything valid.
int* num;
scanf("%d",num);
Run Code Online (Sandbox Code Playgroud)
// OK
int* num = malloc(sizeof(*num));
scanf("%d",num);
Run Code Online (Sandbox Code Playgroud)
// Also OK
int i;
int* num = &i;
scanf("%d",num);
Run Code Online (Sandbox Code Playgroud)

  • 它可以指向垃圾内存。但它*通常*会指向甚至还没有分配给您的进程的内存,这就是为什么您在运行它时会收到错误消息。 (2认同)