עבור לתוכן

שאלה בקשר לפוינטרים לפונקציות

Featured Replies

פורסם

שלום

אני צריך לקבל שני משתנים מסוג כלשהו להשוות מי גדול ממי ולהחזיר 1/0/-1 בהתאם

זאת תת משימה של השאלה הגדולה, אבל הבעיה הגדולה שלי זה ההבנה של הנושא הזה

אני מאוד אשמח אם מישהו יבהיר לי טיפה את הרעיון הכללי פוינטרים לפונקציות כיצד מטפלים ב *void (זה יותר חשוב לי מהפתרון של המשימה כרגע)

תודה רבה

:)

פורסם

מה קשור פונקציות, פויינטרים, והמטלה שלך?

ובאיזה שפה?

מה עוד שאם אתה רוצה להחזיר 0/1/ וואט אבר, אתה לא משתמש בVOID זאת הצהרה על פונקציה שלא מחזירה ערך.

הצבעה על VOID היא הצבעה על מידע שאיננו מוגדר(תחשוב על זה כטיפוס כללי).

פורסם
  • מחבר

איך אני מתייחס למשתנה שלא מוגדר בתוך הפונקציה...?

זה עיקר הבעיה...

פורסם

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

unit_type myFunction(var1, var2, var3)

{

do work...

return result;

{

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

פורסם
  • מחבר

שכחתי לציין, שפת סי :-\

int compare(void* a, void* b)

למשל בדוגמא הזאת

פורסם

*void זה טיפוס שמציין "מצביע לטיפוס כלשהו". אף פעם לא משתמשים במשתנים מהטיפוס הזה סתם ככה, אלא תמיד ממירים אותם למצביעים לטיפוס אמיתי.

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

typedef void (*printFunction) (void*);

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

void printInt(int arg) {
printf("%d", arg);
}

כי אז החתימה לא תתאים. אז צריך לבצע המרה:

void printInt(void* arg) {
int x = *((int*)arg);
printf("%d", x);
}

הפונקציה ממירה את arg מ-*void ל-*int, ואז כמובן עושה לו * כדי לקבל את המשתנה עצמו.

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

void printInt(void* arg) {
float x = *((float*)arg);
printf("%f", x);
}

פורסם
  • מחבר

תודה על העזרה :xyxthumbs:

ארכיון

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

דיונים חדשים