עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C: ארגומנט argv בפונקציית main - האם ניתן לבצע עליו פעולות אריתמטיות?

Featured Replies

פורסם

במהלך כתיבת תכניות, לפעמים נתקלתי בקשיים לבצע פעולות כגון:

int main (int argc, char* argv[])

{

doSomething(argv+1);

return 0;

}

מהן האלטרנטיבות?

פורסם

argv הוא מצביע (או ליתר דיוק מערך, אבל זה אותו דבר) לכל דבר, ולכן אפשר לבצע עליו פעולות אריתמטיות כמו על כל מצביע אחר.

(אם לא למדת מצביעים/מערכים, אז חכה שתלמד...)

נ.ב. כשאתה מדביק קוד, תשתמש בתג קוד (כפתור שנראה כמו #) במקום להצמיד לשמאל.

פורסם

כמו שאמרו לפני אין בעיה לבצע עליו פעולות

יכול להיות שיש לך באג בפונקציה שנובע ממשהו שהרבה לא שמים אליו לב משום מה:

ש char* argv[] == char** argv

כלומר זהו פוינטר למערך של פוינטרים שכל אחד מהם מצביע על תחילתו של מערך של char

פורסם
  • מחבר

אוקיי, נראה לי הבנתי מה הבעיה (ותקנו אותי בבקשה אם אני טועה):

בקוד הנתון לדוגמה, במימוש פונקציית doSomething חייבים לגשת ל-argv עם אינדקס.

למשל: argv[n] \ argv+n

אבל כשניגשים אליו במימוש ישירות ע"י argv, פעולות אריתמטיות עליו מבחוץ (main) גוררות שגיאות קומפילציה.

int main (int argc, char* argv[])
{
doSomething(argv+1);
return 0;
}

פורסם
  • מחבר

illegal cast of pointer from int או משהו כזה..

פורסם

מה שקרה בעצם זה שניסית לשלוח לפונצקיה DOSOMETHING שהיא מקבלת INT , שלחת לה מצביע, כלומר שלחת לה כתובת בזכרון

זה מזכיר לי את ה DEFINE ה וינדוסי ל NULL שהוא (void *) 0x0, ואז זה מונע ממך להשוות כל דבר שהוא לא מצביע ל NULL.

בעקרון כתובת בזכרון היא סוג של INT רק שההתייחסות של הקומפיילר אליה היא ככתובת כדי למנוע שגיאות מתכנתים.

בכל אופן, אתה לא יכול לשלוח את הכתובת הזאת בשום מצב, אתה גם צריך לזכור שARGV הוא מצביע למערך של STRINGS כלומר

מצביע למערך של מצביעים, אם תרצה לשלוח את argv[1] לדוגמא לפונקציה שלך זה גם לא יפעל כי ARGV[1] הוא בעצם גם מצביע

לכן תצטרך לעשות ATOI על ARGV[1] כדי לשלוח אותו לפונקציה שלך.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.