ככה זה אמור להיות
וזו גם נקודה חשובה! מחרוזת של תווים היא תמיד קבועה. לכן היינו מצפים שזה:
char* p = "aviad";
לא היה עובר קומפילציה. אבל ראה זה פלא , זה כן עובר קומפילציה , למה? בשביל תאימות ל C. מה שכן ברגע שננסה להגיד:
p[3] = a;
נקבל run time error, כי ניסינו לשנות תוכן של const! כלומר האיתחול בשורה הזו הופך את המצביע עצמו ל CONST למרות שהוא לא הוגדר ככזה! אם כן היינו רוצים לשנות את התוכן היינו חייבים לקרוא:
char p[] = "aviad";
עכשיו אתחול האיבר השלישי כן היה עובד. כאשר קוראים לפונקציה חייבת להשמר תאימות כאילו עשינו אתחול רגיל. מאחר ש:
char *p = "aviad";
תקין ועובר קומפילציה , אז הקריאה לפונקציה תקינה ועוברת קומפילציה. תמיד הקומפילר יעדיף לקרוא קודם לפונקציה בלי ה const ומכאן קיבלת את התשובה שלך!