设有定义:int a,*pa=&a;以下 scanf 语句中能正确为变量 a 读入数据的是 A. scanf("%d",pa); B. scanf("%d",a); C. scanf("%d",&pa);
时间: 2023-11-19 13:54:34 浏览: 417
正确的语句是B. scanf("%d", &a);。因为变量a是一个整型变量,而pa是一个整型指针,指向a的地址。所以如果要读入a的值,需要使用&a或者直接使用变量名a。而选项A中使用了指针变量pa,这会导致scanf函数将输入的值存储到pa指向的地址中,而不是a的地址中,因此是错误的。选项C中使用了&pa,这会导致scanf函数将输入的值存储到pa本身的地址中,而不是a的地址中,因此也是错误的。
相关问题
若有以下定义和语句:int a,*p=&a;则能够从键盘给变量a输入数据的语句是( )。 A. scanf("%d",*p); B. scanf("%d",a); C. scanf("%d",&p); D. scanf("%d",p);
正确答案是 D. `scanf("%d",p);`。
因为变量`p`是指向变量`a`的指针,所以在对变量`a`进行输入时,应该使用指针`p`的值作为参数传递给`scanf`函数。而`scanf`函数需要的参数是指向变量的指针,因此选项`C`中的`&p`是错误的,因为它是指向指针本身的指针,而不是指向变量`a`的指针。
选项`B`中的`a`是变量的名称,而不是指向变量的指针,因此也是错误的。
选项`A`中的`*p`是对指针`p`所指向的变量`a`进行解引用操作后得到的值,而不是指向变量`a`的指针,因此也是错误的。
因此,正确答案是选项`D`中的`scanf("%d",p);`。
若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是______。(1分) p=&a;scanf("%ld",p); *p=&a;scanf("%ld",p); scanf("%ld",p=&a); scanf("%ld",&a)
不能通过 `scanf` 语句正确给输入项读入数据的程序段是第二个程序段 `*p=&a;scanf("%ld",p);`。
原因是:
- `p` 是一个指向 `long` 类型变量的指针,指向的是变量 `a` 的地址。
- 在第二个程序段中,`*p = &a;` 这条语句是错误的,因为 `*p` 表示 `p` 指向的内存中的值,是一个 `long` 类型的值,而 `&a` 是一个指向 `a` 变量地址的指针,类型为 `long *`,两者类型不匹配。
- 因此,第二个程序段会编译出错,不能正确给 `a` 变量赋值。正确的语句应该是 `scanf("%ld", p);`,该语句可以从标准输入读取一个 `long` 类型的值,并将其存储到 `a` 变量的地址中。
阅读全文