作者khoguan (Khoguan Phuann)
看板C_and_CPP
标题Re: [问题] 请教一下高手以上程式码哪里有错?.....
时间Fri Aug 26 10:42:26 2005
※ 引述《lichihwu (波特多)》之铭言:
: ※ 引述《akalashnikov (ak)》之铭言:
: : : printf( "Enter your name:");
: : : scanf( "%s", name );
: : //如果采用 char name[10]记得加&
: : //另一种不需要
:
: char a[10];
: char *b = malloc(10);
:
: &a和a指向的都是a,使用时不必加&
: b指向的是char*,&b指向的是b本身位置(char**),两个不同值,不可以加&
: 基本上,光a或b就够了,&不该加上。
是的,不用加 &.
char name[10];
scanf("%s", name);
不过,严格说来,&name 这个指标,指向的是整个阵列的位址,
name (经过decay之後)也是个指标,但指向的是阵列第一个元素
的位址。因为位址值只能是某个 byte 的位址,前者虽指向整个
阵列,但也只能放第一个 byte 的位址,所以这两者的位址值会
刚好一样,但 type 不同。 &name 的 type 是 char (*) [10],
name (decay以後) 的 type 是 char *
所以
/* 印出两者的 address 值,一样 */
printf("%p == %p\n", &name, name);
但是
/* 同样是 +1, 但一个是加 10 bytes, 一个只是加了 1 byte,指标型别不同 */
printf("%p != %p\n", &name + 1, name + 1);
最後,请原po以後不要再用这种空洞的标题,
善用标题的方法,请参考 9251 篇。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: khoguan 来自: 220.130.208.168 (08/26 10:45)