看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《hibrain (你腦卡好)》之銘言: : #include <stdio.h> : int main(void) : { : char str[100]; : printf("請輸入字串\n"); : scanf("%s",str);//使用scanf輸入為陣列時不要加上& : //使用scanf 輸入數字或單一字元需加上& : printf("輸入的字串為%s\n",str); : system("pause"); : return 0; : } : 在書上有看到,當使用scanf輸入為陣列時不要加上& : 可是我用scanf("%s",str);跟 scanf("%s",&str); : 出來的結果是一樣的啊,那有加上& 會有什麼問題嗎 ┌─┬─┬─┬─┐ char str[6] │ t│ e│ s│ t│ └─┴─┴─┴─┘ ┌──→01 02 03 04 (記憶體位置) ┌┴┐ str │01│ 使用str的話,會得到陣列的開始記憶體位置 └─┘ 25←┐ └───┐ ┌┴┐&是用來取變數的記憶體位置 &str[0] │01所以&str[0]就是取str[0]的記憶體位置 └─┘│ ┌─┘ ┌┴┐ &str則是指向str的記憶體位置 &str │25│ └─┘ 如果你用scanf("%s", &str); 那他就會把東西存到一個未知的位置去 這是基本的認知 至於為什麼你會有用&str還是一樣的狀況... 還請版上其他更厲害的大大來說明 --
xxxx :老闆都不懂.. ( ′-`)y-~
ooooooooo :這裡禁煙喔XDDDD
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.127.107 ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 12:03)
hibrain:我輸入是用%s 所以寫入就是字串啦 03/06 12:31
真是抱歉,弄錯例子 平常不會存整數陣列不會這樣存Orz ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 14:27)
loveme00835:陣列名稱不是指標, 只是在by value傳遞或做運算時會 03/06 14:36
loveme00835:decay成指標, 其值是 &array[0] 03/06 14:37
james732:str本身代表的是一個指標 <= 其實這句話有問題 03/06 14:44
james732:str代表的就是陣列本身了 03/06 14:44
使用str的話,會得到陣列的開始記憶體位置a 這樣子打呢?
james732:char *str = malloc(10); 這樣才是指標指向陣列 03/06 14:45
ericinttu:認真畫圖有推 03/06 15:43
※ 編輯: annheilong 來自: 61.228.127.107 (03/06 15:56) ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 15:57)