עבור לתוכן
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.

pointer ב C

Featured Replies

פורסם

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

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

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

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

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

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

נערך על-ידי iliagildin

פורסם

מה זה וקטור? אתה מתכוון למערך? (ב-C אין כזה דבר שנקרא וקטור)

השאלה שלך לא ברורה, וגם הקוד לא. למה שלא תעלה את הקוד האמיתי?

פורסם
  • מחבר

ווקטור הינו מערך חד מימדי (לידע כללי מטריצה הינה מערך דו מימדי) פשוט חשבתי שאם אתם תראו לי איך לעשות למערך חד מימדי אני כבר ידע לעשות למערך דו מימדי הרי רק צריך לשנות לולאה ולהוסיף כמובן עוד לולאה. התוכנית שכתבתי הינה התוכנית שלי אני פשוט לא יודע איך להגדיר פונקציה שתחזיר פוינטר ואיך ליקרוא לאותה פונקציה מה 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

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

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

נערך על-ידי iliagildin

פורסם

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

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

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

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

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

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

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

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

יש מבין?

פורסם
  • מחבר

את השיטה השניה לא הבנתי אבל בשיטה הראשונה מה הבעיה של הפונקציה להחזיר לי את result ל main?

פורסם

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

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

ארכיון

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

דיונים חדשים

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.