c- מצביע const

shakedunay

New member
c- מצביע const

מהספר שאני לומד אומרים ש-2 השורות האלו חוקיות:
char* const c2="another test \n"; *c2='b';​
בעצם אני משנה את האיבר הראשון במערך עליו מצביע הפויינטר הקבוע. הקוד עובר קימפול אבל אני מקבל שגיאת זמן ריצה כאשר התוכנית מגיעה לשורה השנייה. מה יכולה להיות הבעיה?
 
אני לא יודע מה הוא עשה שם...

אבל לא ככה מגדירים מצביע קבוע.
ככה מגדירים מצביע קבוע :
const char* c2="another test \n"; *c2='b';​
תאמין לי... זה לא יתקמפל
 

selalerer

New member
הבעיה היא בגלל שזאת מחרוזת קבועה.

המחרוזת היא מחרוזת קבועה, הכרזת עליה בתוך הקוד, ובתיאוריה (זה תלוי קומפיילר) היא יכול להיות אפילו בתוך מקטע הקוד של התוכנה המקומפלת שאליו אין לך בכלל הרשאת כתיבה. עם מחרוזת דינמית לעומת זאת, לא תהיה לך שום בעיה:
char * const c2=new char[10]; c2[0]='K'; c2[1]='K'; c3[2]='\0'; *c2='O'; delete []c2;​
 
למעלה