pointer ב C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

pointer ב C


iliagildin

Recommended Posts

קיבלתי היום משימה במכללה ליכתוב פונקציה ב C שמקבלת ווקטור ומחזירה פוינטר לכל תא בווקטור

וכמו כן גם תוכנית void main שמדפיסה את המשתנה הנל מהפונקציה

על פניו המשימה קלה אבל אני לא יודע איך אני מחזיר פוינטר מפונקציה

או איך אני קורא לפונקציה שהערך המוחזר הוא הפוינטר

int *as
for i=1 i=sizeof(x) i++
as(i)=&x(i)
end
return(as)

תודה רבה לכל העוזרים

קישור לתוכן
שתף באתרים אחרים

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

תודה רבה לכל העוזרים

קישור לתוכן
שתף באתרים אחרים

פונקציה מחזירה פוינטר בדיוק כמו שפונקציה מחזירה כל דבר אחר. במקום לדוגמה להחזיר int הפונקציה צריכה להחזיר *int.

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

קישור לתוכן
שתף באתרים אחרים

אני רוצה שיקחו את הקטע קוד שלי שעובד כאשר הוא ב VOID MAIN יכניסו אותו לפונקציה

ויראו לי איך ליקרוא לאותה פונקציה מה VOID MAIN

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

קישור לתוכן
שתף באתרים אחרים

[CENTER]
include #stdio.h

void main()

{

int x[9];

int *rt[9];

x={1, 2, 3, 4, 5, 6, 7, 8, 9};

rt*=myfunc(x[]);

printf("everything I want: %x\n", rt);

}

int* myfunc(x[])

{

[9]int *cd

for (i=1 i=sizeof(x) i++)

{

cd
[i]
=&x
[i]
;

end
[/CENTER]

[center][indent=2]}

return(cd)

}

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

לא מבין מה לא בסדר

תודה רבה לכל העוזרים

קישור לתוכן
שתף באתרים אחרים

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

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

הדרך הראשונה היא שהפונקציה לא תיצור את המערך, אלא תקבל אותו מבחוץ ורק תמלא אותו. דהיינו, myfunc צריכה להיראות ככה:

void myfunc(int x[], int* result[]) { ... }

שים לב ש-result הוא מערך של מצביעים ל-int, והפונקציה צריכה למלא אותו. האחריות על להקצות את המערך הזה היא של מי שקורא לפונקציה (במקרה שלך זה ה-main).

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

int** myfunc(int x[]) { ... }

בתוך הפונקציה היא צריכה לעשות malloc למערך בגודל המתאים. האחריות של ה-main כרגע היא רק לשחרר את המערך הזה (ע"י free) בסוף העבודה איתו.

יש מבין?

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...