Re: [問題] 請教一下高手以上程式碼哪裡有錯?.....
※ 引述《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)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章