כותב |
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 20:54 | | IP רשוּם
|
|
|
|
למשל יש לי פונקציה שעושה משהו ואני רוצה לקבל ממנה מערך שלם של
char 128
איך אני יכול לעשות את זה?
אמרו לי להשתמש בייחסים או משהו אבל אין לי מושג איך לעשות את זה
עזרה..
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 24 December 2005 בשעה 20:57 | | IP רשוּם
|
|
|
|
לא ניתן להעביר מערך, אבל ניתן להעביר מצביע להתחלת המערך ולציין את גודל המערך, וכך להעביר אליה מערך שלם. הפונקציה יכולה לשנות את ערכו של המערך והשינויים יתבטאו גם מחוץ למערך. לחילופין פונקציה יכולה גם להקצות זיכרון דינמי ולהחזיר מצביע לתחילת הזכרון, ותוכל להתייחס אליו בתור מערך שהפונקציה יצרה. (לא לשכוח לשחרר בסוף את הזכרון!)
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:04 | | IP רשוּם
|
|
|
|
אפשר דוגמא?
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:11 | | IP רשוּם
|
|
|
|
ככה אני מגדיר:
char *buf = new char [128];
למשל שאני מנסה לקרוא לפונקציה ככה
function(&buf)
והפונקציה ככה
char function(char *buf)
כשאני עושה ככה זה קורס לי..
|
חזרה לתחילת העמוד |
|
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 24 December 2005 בשעה 21:20 | | IP רשוּם
|
|
|
|
לא ככה, למדת פוינטרים? אם לא אז פשוט תגדיר מערך כרגיל, ככה
בקריאה לפונקצייה תכתוב
קוד:
function_name(buf, size);
|
|
|
size הוא גודל המערך. ובכותרת הפונקצייה עצמה תכתוב כך:
קוד:
void function_name(char buf[], int size);
|
|
|
כל מה שתעשה עם המערך בתוך הפונקצייה, ישנה את המערך עצמו. המערך אכן ישתנה. לא כמו משתנה רגיל.
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:22 | | IP רשוּם
|
|
|
|
אני לא מבין אבל איך זה יעבוד אין פה מצביע אחד..
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:34 | | IP רשוּם
|
|
|
|
אולי לא הבנת אותי נכון
אני רוצה לקבל מערך מפונקציה
אמרו לי להשתמש בפונטרים ואני לא יודע איך
ומה שאתה מראה לי פה זה שטויות.. אתה עושה שטויות
|
חזרה לתחילת העמוד |
|
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 24 December 2005 בשעה 21:37 | | IP רשוּם
|
|
|
|
לא הבנתי אותך, אתה רוצה לשלוח מערך לתןך פונקצייה, ושהפונקצייה תעשה בו שינויים.? נו אז מה שהבאתי לך נכון... אל תגיד סתם שאני עושה שטויות, תנסח יותר טוב את בקשתך. מערך הוא בעצם פוינטר-מצביע לאיבר הראשון במערך. בגלל זה כששולחים מערך לא שמים & . זה לא משתנה רגיל.
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:39 | | IP רשוּם
|
|
|
|
אבל מה שהגדרתי זה היה פוינטר לא מערך.. תגיד אתה יודע בכלל על מה אתה מדבר :/
עובדה שunderwarrior הבין טוב מאוד אז עזוב את הטופיק ונחכה למישהו רציני
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 24 December 2005 בשעה 21:44 | | IP רשוּם
|
|
|
|
נסו לדבר כמו בני אדם. danny - מה בדיוק אתה צריך? הפתרון של pitbull נראה מאוד הגיוני
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 December 2005 בשעה 21:44 | | IP רשוּם
|
|
|
|
אה לא גם הוא לא הבין :(
יש לי פונקציה ואני רוצה לקבל ממנה מערך (שייהיה לי את המערך מחוץ לפונקציה גם)
איך אני עושה את זה?
|
חזרה לתחילת העמוד |
|
|
pitbull משתמש חבר
הצטרף / הצטרפה: 14 May 2005
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 24 December 2005 בשעה 22:11 | | IP רשוּם
|
|
|
|
חח דני, תבדוק לפני שאתה מדבר. מי שלא מבין פה כלום זה כנראה אתה. :| אין לי כוח אליך. ביקשת עזרה, מנסים לעזור לך ואתה בא בטענות ועוד אומר שטויות. כמו שניר אמר-נסה לדבר כמו בנאדם [במיוחד אם אתה לא מבין בנושא ]
|
חזרה לתחילת העמוד |
|
|
Inj3ction משתמש חבר
הצטרף / הצטרפה: 09 October 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 149
|
נשלח בתאריך: 24 December 2005 בשעה 23:49 | | IP רשוּם
|
|
|
|
אתה יכול פשוט להגדיר את המערך כמערך גלובאלי
לדוגמא:
קוד:
#include <stdio.h>
char bla[100];
function() {
Do somthing; }
int main() {
Do somthing }
|
|
|
ואתה יכול להשתמש במערך בכל הפונקציות
|
חזרה לתחילת העמוד |
|
|
danny אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 25 December 2005 בשעה 01:18 | | IP רשוּם
|
|
|
|
Inj3ction
זה מעיד על תכנות גרוע
ולא יעיל.. אני מודע לפיתרון הזה אבל ישנם דרכים אחרות יותר טובות כנראה
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 25 December 2005 בשעה 21:16 | | IP רשוּם
|
|
|
|
יש לך שני דרכים לעשות את זה...
זיכרון דינאמי, זיכרון קבוע.
בשני המקרים אתה יכול להחזיר את המצביע או שאתה יכול לשנות מצביע שיתנו לך...
לכל שיטה יש חסרונות ויתרונות..
אם אתה חייב להחזיר את זה כערך חזרה אז מומלץ זיכרון דינאמי...
אתה מאלקץ בתוך הפונקציה זיכרון ומחזיר מצביע עליו.
אם אתה לא חייב אתה יכול להשתמש בשיטה של העברת פרמטר, אם נותנים לפונקציה
קטע זיכרון מוכן שפשוט מחכה שהפונקציה תיכתוב לתוכו זה יותר פשוט, אבל קצת
מגביל בעניין האורך..
|
חזרה לתחילת העמוד |
|
|
Inj3ction משתמש חבר
הצטרף / הצטרפה: 09 October 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 149
|
נשלח בתאריך: 26 December 2005 בשעה 06:20 | | IP רשוּם
|
|
|
|
דני אני מציע לך להגיד תודה ולשתוק. מנסים לעזור לך ואתה מדבר ככה. הצעתי לך את אחד הפתרונות וזה לא מעיד על שום תכנות גרוע
זה פשוט פחות יעיל קצת אבל זה גם פתרון ולדעתי הפתרון הכי פשוט.
|
חזרה לתחילת העמוד |
|
|
SDX משתמש חבר
הצטרף / הצטרפה: 26 September 2005
משתמש: מנותק/ת הודעות: 106
|
נשלח בתאריך: 26 December 2005 בשעה 12:49 | | IP רשוּם
|
|
|
|
injection,
זה באמת מעיד על תכנות גרוע
__________________ Smoke weed evryday
~-===-~
|
חזרה לתחילת העמוד |
|
|
Inj3ction משתמש חבר
הצטרף / הצטרפה: 09 October 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 149
|
נשלח בתאריך: 26 December 2005 בשעה 12:57 | | IP רשוּם
|
|
|
|
מאיפה הוצאתם את השטויות האלה?!?
זה פשוט אחת הדרכים
איך בדיוק זה מעיד על תכנות גרוע??
יש דרכים יותר טובות. אתה יכול להעביר את האיבר הראשון של המערך כמצביע מהפונקציה ואז להביא את גודל המערך עם malloc()
לדעתי הפתרון של המערך הגלובאלי זה הכי פשוט וטוב
|
חזרה לתחילת העמוד |
|
|
SDX משתמש חבר
הצטרף / הצטרפה: 26 September 2005
משתמש: מנותק/ת הודעות: 106
|
נשלח בתאריך: 26 December 2005 בשעה 13:00 | | IP רשוּם
|
|
|
|
ואם ישלך ספריה נפרדת שכתבת, איך תעשה את זה?
__________________ Smoke weed evryday
~-===-~
|
חזרה לתחילת העמוד |
|
|