这四个选项中的代码都试图使用 scanf 函数来读取一个整数,但它们的实现方式不同,其中一些是正确的,而另一些是错误的。
选项 A 和 B 的代码是相同的,它们都定义了一个指向 int 类型的指针变量 p,然后使用 scanf 函数试图将读取到的整数存储到指针 p 指向的内存地址中。但是,由于指针 p 没有被初始化,所以它不指向任何有效的内存地址。因此,这两个选项中的代码都是错误的,它们会导致未定义行为。
选项 C 的代码定义了一个 int 类型的变量 k 和一个指向 int 类型的指针变量 p。然后,它将指针 p 初始化为指向变量 k 的地址。接下来,它使用 scanf 函数将读取到的整数存储到指针 p 指向的内存地址中,即变量 k 中。但是,在调用 scanf 函数时,它使用了错误的参数 &p。由于 scanf 函数需要一个指向存储位置的指针作为参数,所以正确的写法应该是 scanf("%d", p);。因此,选项 C 中的代码也是错误的。
选项 D 的代码试图定义一个 int 类型的变量 k 和一个指向 int 类型的指针变量 p。然后,它试图将指针 p 初始化为指向变量 k 的地址。但是,在初始化指针时,它使用了错误的语句 *p=&k;。由于这行代码试图将变量 k 的地址赋值给指针 p 所指向的内存地址中,而不是赋值给指针本身,所以这行代码是错误的。正确的写法应该是 p=&k;。因此,选项 D 中的代码也是错误的。
综上所述,在这四个选项中,没有一个选项能够正确地使用 scanf 函数来读取一个整数。