עבור לתוכן

C | Char*

Featured Replies

פורסם

היי

כאשר אני רואה את ההודאה *char בקוד , מה זה עושה בקוד?

דוגמא:

char* Go = "B";

ואיזה סוג מצביע זה ? האם לפני השימוש אני צריך להכריז עליו על ידי Type def?

פורסם

מה זאת אומרת "איזה סוג מצביע זה"? זה מצביע ל-char.

מחרוזות ב-C הן פשוט מערכים של char (כלומר, רצף של char בזכרון). מערך ב-C הוא בעצם מצביע לתחילת המערך (כלומר, הטיפוסים []char ו-*char הם למעשה שקולים). כשאתה עושה:

char* go = "B";

הקומפיילר יוצר בזכרון מערך שמכיל את המחרוזת "B" (זה בעצם מערך בגודל 2 - תו ראשון הוא 'B' ותו שני הוא הערך המספרי 0, שמציין את סוף המחרוזת), ו-go הוא מצביע שמכיל את המקום של המערך הזה בזכרון (מעשית, הוא מצביע לאיבר הראשון במערך).

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

פורסם
  • מחבר

מה זה עוזר לי שאני משתמש במצביע לטיפוס? :s05:

פורסם

זה בערך כמו לשאול: "מה זה עוזר לי שאני משתמש במיקרוגל?"

לכל דבר יש שימוש, צריך רק להבין איך הוא פועל ולמה הוא נועד. לפי השאלות שלך, אתה רק בתחילת הלימוד, ומנסה לקפוץ קדימה בלי להבין את הבסיס. תלמד בצורה מסודרת ואז תבין את המשמעות של הדברים.

פורסם
  • מחבר

אני למדתי C אך יש לי שאלות על דברים שלא הבנתי , זה אחד הנושאים.

פורסם

להגיד "למדתי C אבל אני לא מבין מצביעים" זה כמו להגיד "למדתי חשבון אבל אני לא יודע כפל וחילוק". זה חלק כל-כך בסיסי, שהלימודים שלך אפילו לא קרובים לשלמים כל עוד אתה לא הבנת אותם.

ברור שאתה רוצה להבין, אך לא תתקדם לשום מקום בכך שתשאל שאלות אקראיות מנותקות מהקשר בפורומים. תשב עם ספר, עם הסברים, עם תרגילים, או תעשה קורס מסודר.

פורסם
  • מחבר

אתה צודק, אך הספר שלי הסביר ממש בקצרה את הנושא של מצביעים , לכן אני מתקשה.

פורסם

מה שחשוב להבין על מצביעים זה הקונספט ואז אולי תבין למה זה טוב ומה אפשר לעשות עם זה.

מצביע הוא בעצם משתנה שבמקום להחזיק "ערך" מחזיק כתובת בזיכרון (שזה כמובן גם ערך אבל תחשוב על זה בהתחלה בתור כתובת).

זאת אומרת חוץ מ- int, float, double וכו יש עוד סוג של משתנה מטיפוס כתובת.

*int שקול כמעט לחלוטין ל- *float. שניהם מחזיקים כתובת בזיכרון. שניהם בגודל 4 bytes (בהנחה ואתה משתמש במערכת הפעלה של 32 ביט - זה מה שזה אומר בעצם. מערכת ההפעלה משתמשת במרחב זיכרון של 32 ביט = 4 בייט).

פורסם
  • מחבר

הבנתי את זה.

מה שלא הבנתי למה לי להשתמש במצביע לטיפוס (לא לערך!)

פורסם

על מה אתה מדבר?

למצביע צריך להיות טיפוס מסוים. נניח שיש לך מצביע בשם x, ואתה מנסה לגשת אל הערך שעליו הוא מצביע (באמצעות x*). מה הטיפוס של x*? האם הוא int? אולי float? איך אפשר לדעת?

בשביל זה למצביע חייב להיות טיפוס. מצביע הוא מצביע לטיפוס מסוים, לדוגמה *int הוא מצביע ל-int. אם x הוא *int, זה אומר ש-x* (הערך שעליו מצביע x) הוא מטיפוס int.

הבהרה: כשאומרים "מצביע ל-int" מתכוונים "מצביע למקום בזכרון שבו אמור להיות מאוכלס משתנה מטיפוס int". או אפילו יותר מדויק: "מצביע למקום בזכרון שעל הקומפיילר להתייחס אליו כ-int".

פורסם

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

דירפרנס &, ++ וכו.

ב- C++ גם void* הוא חוקי.

פורסם
  • מחבר

שניצל : עכשיו הבנתי , תודה רבה , אני ממש מעריך את מה שאתה כאן פשוט עבודה של מעל ומעבר תודה רבה לך.

ארכיון

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

דיונים חדשים