若有下面說明語句:int a,*p=&a;char s[]="abc";則能正確從鍵盤上讀入整數和字符串并分別賦值給變量a和s的語句是()(A)scanf("%d%s",p,s);(B)scanf("%d%s",&p,&s);(C)scanf("%d%s",a,s);(D)scanf("%d%s",&a,&s);我是初學者,最好能講出詳細的原因啊
熱心網友
說實話,上面四種寫法都不正確,相對來說A是比較正確的首先*p=&a,就是將a的地址值賦給p,也就是p==&a其次,s[]="abc"是在內存區域里面開設4個字節的字符型數組,保存'a','b','c','\0'四個字符,并將數組的第一個字節的地址值賦給s,即s[0]='a',也就是說,s是一個指針,保存有字符串的第一個地址值這樣一來,由于scanf要求用地址作為參數,A選項里面的就滿足要求,不過,在輸入字符串的時候,如果字符串的長度大于3,則可能會覆蓋掉其他變量的值,以至于程序錯誤
熱心網友
出題的人肯定不是程序員!這個題明顯有BUG,輸入字符串超過3個字符就越界了,系統不掛才怪!拿錯誤題考人有什么用?純粹誤導人。從語法上講,C語言能對變量進行改動的只有指針。scanf是輸入函數,肯定是要改變變量的。因此輸入的參數必須是指針。只有A是符合語法要求的,p是int型指針,s是char數組指針。只有A能編譯通過。千萬別按這個書上的例子學!還是找本國外比較經典的C語言教材學習好。不要被誤導。
熱心網友
答案是A
熱心網友
我覺得是A!B和C先排除掉,因為B中,P是指針,沒有&p這種寫法,C中應該是&a!D中,s其實也是一個指針,也不能&s。所以只有A是對的!