Re: [問題] 請教一下高手以上程式碼哪裡有錯?.....

看板C_and_CPP (C/C++)作者 (Khoguan Phuann)時間19年前 (2005/08/26 10:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《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)
文章代碼(AID): #133dw3Gf (C_and_CPP)
文章代碼(AID): #133dw3Gf (C_and_CPP)