เท่าที่จำความได้ เวลารับข้อมูลเข้ามาซึ่งใช้ scanf() ต้องใส่ & ไว้หน้าตัวแปรที่เราไว้ใช้เก็บข้อมูล ยกเว้นถ้าข้อมูลที่รับมาเป็นข้อความ ก็ไม่ต้องใส่ จำแบบนี้มาตลอด จนวันหนึ่งได้คุยกับเพื่อน เพื่อนก็บอกว่าใส่หรือไม่ใส่ก็ได้ ก็แบบเอ๊ะ เลยไปหาข้อมูลมา ก็ได้กลายมาเป็นบทความนี้
& คืออะไร
& เป็นการระบุที่อยู่ของตัวแปรนั่น ๆ หรือก็คือใช้เพื่อเป็นตัวรับที่อยู่ของตัวแปร เช่น
scanf(“%d”, &n);
จะเป็นการเก็บค่าอะไรก็ตามที่ผู้ใช้ป้อนเข้ามาซึ่งเป็นข้อมูลชนิด integer โดยจะเก็บใส่ตำแหน่งที่อยู่ของตัวแปร n
แล้วทำไมถ้าเป็นข้อความไม่ต้องใส่ล่ะ?
char name[5];
scanf("%s", name);
เนื่องจากว่าในภาษาซีไม่มีตัวแปรชนิด string มีแต่เพียงอาเรย์ของ characters ในที่นี้ก็คือ name สมมติว่าเราป้อนค่า ‘Anne’ เข้าไปจะได้อาเรย์จะเก็บข้อความดังรูปด้านล่าง
โดยตัวแปร name ซึ่งใช้ string format (%s) ก็จะเป็นพอยเตอร์ที่ชี้ไปที่ตำแหน่งที่อยู่ของสมาชิกตัวแรกในอาเรย์ (&name[0]) ทันที เราจึงไม่จำเป็นต้องใส่ & เพื่อระบุที่อยู่ของตำแหน่ง
คร่าว ๆ ก็มีประมาณนี้ ถ้ามีข้อมูลอะไรเพิ่มเติมจะแวะเวียนมาใส่เจ้าค่ะ
Source : https://www.geeksforgeeks.org/not-used-strings-scanf-function/