פורסם 2011 במאי 3114 שנים במהלך כתיבת תכניות, לפעמים נתקלתי בקשיים לבצע פעולות כגון:int main (int argc, char* argv[]){ doSomething(argv+1); return 0;}מהן האלטרנטיבות?
פורסם 2011 במאי 3114 שנים argv הוא מצביע (או ליתר דיוק מערך, אבל זה אותו דבר) לכל דבר, ולכן אפשר לבצע עליו פעולות אריתמטיות כמו על כל מצביע אחר.(אם לא למדת מצביעים/מערכים, אז חכה שתלמד...)נ.ב. כשאתה מדביק קוד, תשתמש בתג קוד (כפתור שנראה כמו #) במקום להצמיד לשמאל.
פורסם 2011 במאי 3114 שנים כמו שאמרו לפני אין בעיה לבצע עליו פעולותיכול להיות שיש לך באג בפונקציה שנובע ממשהו שהרבה לא שמים אליו לב משום מה:ש char* argv[] == char** argvכלומר זהו פוינטר למערך של פוינטרים שכל אחד מהם מצביע על תחילתו של מערך של char
פורסם 2011 ביוני 114 שנים מחבר אוקיי, נראה לי הבנתי מה הבעיה (ותקנו אותי בבקשה אם אני טועה):בקוד הנתון לדוגמה, במימוש פונקציית doSomething חייבים לגשת ל-argv עם אינדקס.למשל: argv[n] \ argv+nאבל כשניגשים אליו במימוש ישירות ע"י argv, פעולות אריתמטיות עליו מבחוץ (main) גוררות שגיאות קומפילציה.int main (int argc, char* argv[]){ doSomething(argv+1); return 0;}
פורסם 2011 ביוני 314 שנים מה שקרה בעצם זה שניסית לשלוח לפונצקיה DOSOMETHING שהיא מקבלת INT , שלחת לה מצביע, כלומר שלחת לה כתובת בזכרוןזה מזכיר לי את ה DEFINE ה וינדוסי ל NULL שהוא (void *) 0x0, ואז זה מונע ממך להשוות כל דבר שהוא לא מצביע ל NULL.בעקרון כתובת בזכרון היא סוג של INT רק שההתייחסות של הקומפיילר אליה היא ככתובת כדי למנוע שגיאות מתכנתים.בכל אופן, אתה לא יכול לשלוח את הכתובת הזאת בשום מצב, אתה גם צריך לזכור שARGV הוא מצביע למערך של STRINGS כלומרמצביע למערך של מצביעים, אם תרצה לשלוח את argv[1] לדוגמא לפונקציה שלך זה גם לא יפעל כי ARGV[1] הוא בעצם גם מצביעלכן תצטרך לעשות ATOI על ARGV[1] כדי לשלוח אותו לפונקציה שלך.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.