为什么我们需要放一个
&
scanf()
中的运算符
用于将值存储在整数数组中,而不是将字符串存储在char数组中时?
int a[5];
for(i=0;i<5;i++)
scanf("%d",&a[i]);
但是
char s[5]; scanf("%s",s);
由于数组是指向第一个元素的指针,因此我们需要传递存储值的地址.因此,对于int / float数组,它基本上意味着
(a+i)
但是字符串情况如何?
- 2021-1-111 #
- 2021-1-112 #
在表达式中使用数组名称时(作为
sizeof
的操作数除外) 或操作员&
的地址 ),它将计算该数组中第一项的地址-即指针值.那意味着没有&
需要获得地址。在表达式中再次使用int(或short,long,char,float,double等)时(再次,作为
sizeof
的操作数除外) 或&
),它计算得出该对象的值.要获取地址(即指针值),您需要使用&
取地址。 - 2021-1-113 #
scanf("%d", a + i )
也可以。%d
和%s
告诉scanf
会发生什么,但在两种情况下都期望有一个地址在C语言中,数组和指针是相关的。
%s
对scanf
说 期望一个字符串是\0
终止,是否适合字符数组scanf
不在乎. - 2021-1-114 #
All the variables used to recieve values through
scanf()
必须通过他们的地址传递.这意味着所有参数都必须指向用作参数的变量。scanf("%d", &count);
将字符串读取到字符数组中,而没有任何索引的数组名称是数组的第一个元素的地址。因此,我们使用
将字符串读取到字符数组地址中scanf("%s",address);
在这种情况下,地址已经是一个指针,不需要在&运算符之前。
p因为字符数组已经是指针。
您可以将C数组视为指向堆栈分配的RAM量的指针.您甚至可以对它们使用指针操作,而不是使用数组索引.
*a
和a[0]
两者都产生相同的结果(返回数组中的第一个字符)。
相关问题
- c:printf不在控制台上printceclipsegccprintfscanf2021-01-11 23:56
- arrays:在C中将字节转换为Int / uintcarraysserializationintbyte2021-01-11 21:27
- 为什么scanf不需要字符串的与号,并且在printf中也可以正常工作(在C语言中)?cstringpointersprintfscanf2021-01-10 21:55
- c:scanf(或)printf中的格式说明符错误cinputprintfscanf2021-01-10 19:29
- c:从输入将数据存储在数组中carrays2021-01-10 18:56
scanf接受一个指向您要输入值的指针。在第一种情况下,您正在传递对位置in中特定int的引用.整数数组.在第二个实例中,您将整个数组传递给scanf.在C语言中,数组指针是同义词,可以互换使用(某种).变量s实际上是指向内存的指针,该内存具有5个字符的连续空间。