首页 > 试题广场 >

有定义语句,则正确的输入语句是______。

[不定项选择题]
有定义语句:
int b;
char c[10];
则正确的输入语句是______。
  • scanf("%d%s",&b,&c);
  • scanf("%d%s",&b,c);
  • scanf("%d%s",b,c);
  • scanf("%d%s",b,&c);
A, B均正确 首先这是C的一个误区 对于一个在栈上分配的数组,且在创建的代码块中进行访问的话 "c" 实际上有两种含义 : 1. 一个指向十个char类型元素的数组 2. 一个char* 类型的指针 对于1而言 ,在同代码块中 sizeof(c) 输出 10,而不是4或者8 那么何时会是 1 何时 会是2呢? 实际上 2是 1的一种语法糖,是语言设计者为了方便而放下的一个空子,大家可以尝试一下二维数组,这个语法糖就不成立了,因为作者没有留下这种语法糖给程序员。 这就是所谓的上下文语义(编译器读的语义): scanf("%s", c); //这里c是一个char* 类型的指针,编译器相信程序员将它指向了一块内存块 scanf("%s", &c); //这里c是一个指向十个char元素的数组的指针,这种才是最正统的用法
发表于 2015-11-05 18:09:41 回复(0)
选B
scanf 需要传入的是变量地址
int b的地址是&b
char c[10]这是一个数组,变量名即为地址c
发表于 2015-08-28 08:46:11 回复(5)
scanf传入的是地址,printf传入的是数值
对于数组,变量名就是地址。c是c[0]的地址,&c是整个c[0]的首地址,二者虽然值相同但是所占内存空间不一样
编辑于 2018-09-14 15:08:04 回复(0)
A B都正确。
测试A B均可以。
发表于 2015-08-29 18:46:44 回复(3)
c语言中,数组名被弱化成一个const指针,其值是数组的首地址。
取&c时,表示的是一个数组指针,指向整个数组【可以把整个数组看出是一个结构体】的地址。
所以a和b都可以。
编辑于 2018-03-25 19:37:40 回复(1)
B是正确的,A中c是地址,引用c就是对c起一个别名,c内存储的地址还是数组的首地址,A也对,但优先选B,我是这么理解的
发表于 2015-08-29 21:43:51 回复(2)
地址值确实一样,但类型不一样!
发表于 2020-09-29 10:00:38 回复(0)
c &c &c[0]的值都一样,都是数组第一个元素的地址。
区别在于类型不同,用typeid.name()可以求出它们的类型,c的类型是char[10],&c的类型是char(*)[10],&c[0]的类型是char*
发表于 2020-07-26 03:49:23 回复(0)
选B scanf里面穿入地址 b的地址是&b 而c是数组 c就直接表示数组c的首地址
发表于 2015-08-29 10:10:12 回复(0)
c为&c[0],&c为整个数组的首地址,相当于数组指针。他们均指向数组的首地址,但含义不一样。
具体区别见程序中x和&x以及p的区别
编辑于 2022-05-18 09:34:49 回复(0)
对于数组来说数组名存放的就是首元素的地址
发表于 2022-04-20 14:49:37 回复(0)
个人理解是: &c是代表整个数组的地址,c代表数组首元素的地址,二者虽然值相同,但意义不同,不过可以用来进行输入
发表于 2022-04-16 15:13:52 回复(0)
首先,判定对整型变量b进行%d的打印操作,b在定义时并没有被初始化,所以打印的会是垃圾值,这是无效的操作。 其次,对c/&c的判定,%s打印操作,前者是数组名,即对数组首元素取地址,后者是对整个数组取地址,这样是都被允许的。
发表于 2022-04-12 00:19:46 回复(0)
本题考察 char c[10] 和 char *c 的区别,对于char c[10],c和&c都是取c[0]的地址,而对于char *c而言,c是取c[0]的地址,而&c则是取指针变量c在内存中的地址。
发表于 2022-03-21 11:41:49 回复(0)
数组名c是数组首元素的地址,而&c是数组的地址。 数值相同,含义不一样!
发表于 2022-03-21 09:31:40 回复(0)
A, B均正确 首先这是C的一个误区 对于一个在栈上分配的数组,且在创建的代码块中进行访问的话 "c" 实际上有两种含义 : 1. 一个指向十个char类型元素的数组 2. 一个char* 类型的指针 对于1而言 ,在同代码块中 sizeof(c) 输出 10,而不是4或者8 那么何时会是 1 何时 会是2呢? 实际上 2是 1的一种语法糖,是语言设计者为了方便而放下的一个空子,大家可以尝试一下二维数组,这个语法糖就不成立了,因为作者没有留下这种语法糖给程序员。 这就是所谓的上下文语义(编译器读的语义): scanf("%s", c); //这里c是一个char* 类型的指针,编译器相信程序员将它指向了一块内存块 scanf("%s", &c); //这里c是一个指向十个char元素的数组的指针,这种才是最正统的用法
发表于 2021-01-22 12:50:05 回复(0)
A d的值可看作一个地址,scanf(“%d”,d);//把值存到 *(d);
B 显然是一般用法,正确
发表于 2019-09-13 22:10:29 回复(0)
完全没理解这个题的含义。
发表于 2017-12-23 13:32:36 回复(0)
请牛客平台提供详细的问题方向,从字面意义上来看会引起歧义,一般人都觉得在很多情况下是AB均正确
发表于 2017-05-13 21:01:56 回复(0)
没看清是scanf还是printf
发表于 2017-03-26 00:23:06 回复(0)