关于scanf函数中的地址列表
scanf函数的形式如下:scanf(格式控制,地址列表)例如一个整型变量的输入:int a;scanf("%d",&a);这是容易理解的,但是如果要输入一个字符串的时候呢? char a;
scanf("%s",&a); scanf("%s",a);以上两条语句到底哪个是正确的呢?首先,根据C语言(谭浩强第3版)P230的说明,“数组名代表数组中首元素的地址”,且有两条语句等价的例子:p=&a 等价于 p=a ,我认为第二条scanf语句是正确的,但实际是两条 scanf语句都是正确的。哪位能解释下这是为什么。 没人回复! 你既然都说 p=&a 等价于 p=a
那你干嘛不这样写呢?
scanf("%s",&a);
scanf("%s",a);
是否发觉自己说话矛盾了?
还有,数组的输入值,书上有N种方法,为什么不看看书呢?
int*p= a;
for(i=0;i<50;i++)
{
scanf("%c",p++);
} 谢谢楼上的热心回复。
可能我没有说清楚,我并不是像输入一个数组,也并不只是想输入一个字符串。
char a;
&a
a
这里我是想搞明白a和&a的区别,虽然&a和a等价,但是&a和a也等价吗?
还在学习中,谭浩强的C语言指针部分我还只看一遍,我想至少还应该看9遍。
再次谢谢楼上兄弟的热心回答。 数组命只是个常量,你对它取址有意义吗?就像你对100这个常量去取址能取到什么?
所以&a本身就是错的。 恩,数组名是一个指针常量,实际就是一个地址。对地址取地址应该是没有意义。
但是C编译器并没有报错,
回头我上下我在vs2008 C 和EW430 c watch 窗口中的截图。 &a,a,&a[],三者作为左值的意思分别是:
a:数组a[]的首元素的首地址;
&a:数组a[]的首元素的地址;
&a[]:和a作为左值意思一样;
请分清楚他们的区别 写错了,都是作为右值,不好意思 7# 无赖皮肤
&a说得不对,作为右值,例如:
char a = {0};
&a 表示一个指向一个有10个char类型数据组成的数组,&a+1,指针指向的地址会跳十个:
名称 值 类型
a 0x0012ff30 "烫……" char
&a 0x0012ff30 char *
&a+1 0x0012ff3a char *
以上是在vs2008 C 环境中的结果。
页:
[1]