עבור לתוכן

Featured Replies

פורסם

הי

אני אשמח אם משהו יוכל לעזור לי 

למה אני לא יכולה לעשות בשפת C

בmain

int *count=0;

ולשלוח את count ולא את count &

ולקבל את זה לפונקציה בתור מצביע

ואחכ להדפיס בmain

את *count?

אני אשמח לתשובה

תודה ענקית!!!

 

פורסם
ציטוט של shir gold

הי

אני אשמח אם משהו יוכל לעזור לי 

למה אני לא יכולה לעשות בשפת C

בmain

int *count=0;

ולשלוח את count ולא את count &

ולקבל את זה לפונקציה בתור מצביע

ואחכ להדפיס בmain

את *count?

אני אשמח לתשובה

תודה ענקית!!!

 

את יכולה להדביק את הקוד שלך?

פורסם

אבל בגדול 

int *count = 0 זה לא משהו שאת יכולה להשתמש בו ממש... את צריכה להקצות זיכרון

נערך על-ידי captaincaveman

פורסם

הרבה זמן שלא כתבתי קוד בשפת C אבל לפי איך שזה נראה את מנסה להצהיר על משתנה מסוג מצביע והצבת לו ערך 0. האפליקציה לא יכולה לגשת לכתובת הזו בזיכרון אם אחרי ההצהרה תנסי לקרוא את ערך התא מסוג int שכתובתו 0 בעזרת count*.

פורסם
  • מחבר

מצרפת פה תמונה של הקוד

תודה רבה!!

זה מריץ לי אבל לא מדפיס את הcount

image.thumb.png.baea1fab24a2f4e42bc787b8de5d5b4f.png

פורסם

תצהירי על משתנה count ללא *. ושאת מעבירה לפונקציה cheak את הפרמטר השני תעשי count&. ושאת מדפיסה את הערך של count בשורה אחריו גם תורידי את ה-*.

פורסם

או שתקצי זיכרון עם malloc

פורסם
  • מחבר

תודה רבה!

אגב איך אני יכולה לעשות את זה עם malloc???

והבנתם מה היתה הבעיה?

פשוט בגלל שהוא הצביע לnull?

 

פורסם

לפני זה, תחפשי בגוגל heap vs stack memory ותלמדי

פורסם

כשאת מכריזה על מצביע מסוג כלשהו (מצביע ל-int במקרה שלך), את צריכה להקצות זיכרון שיכיל את המידע. מה שקורה זה שהמצביע יחזיק את הכתובת בזיכרון שמייצגת את המקום שהוקצה למידע שלך (מקום בגודל של 4 bytes בדרך כלל במקרה של int).

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

1. לא באמת הקצית מקום בזיכרון

2. גם אם היית מקצה, לא היית מקבלת 0 ככתובת.

ספציפית 0 במצביע נקרא null pointer. הכתובת 0 היא לא כתובת חוקית למצביע.

למעשה, בדרך כלל נשים 0 (או null) במצביע כדי שנוכל בשלב יותר מאוחר בקוד לוודא שבאמת איתחלנו את המצביע (נבדוק שהוא שונה מ-0 או null) לפני שננסה להשתמש בו.

נערך על-ידי captaincaveman

פורסם
  • מחבר

יש לי פה שאלה

אני אשמח מאוד להסבר על התשובה

זה תרגיל בשפת c

#include <stdio.h>

#define r 10
#define c 20

 

 

int main()

{
    int(*p)[r][c];
    printf("%d", sizeof(*p));
    getchar();
    return 0;

}

התשובה היא 800

אני אשמח מאוד להסבר לא הבנתי למה זה 800

תודה ענקית!!!!

 

פורסם

אני לא מאמין שקיבלת תרגיל כזה.

זה יוצא 800 כי יש לך מערך דו ממדי אז עושים 10 כפול 20 כפול 4.

עושים כפול 4 כי זה הגודל של האלמנטים במערך שהם *int (אפליקציית 32bit). ובהתאם להגדרות הקומפיילר כיום אפשר להגדיר אפליקציות 64bit שאז זה 8 בייטים ולא 4.

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

הצהרה על משתנה מסוג מערך הופכת את המשתנה שלו למצביע לאלמנט הראשון שבו

הצטרפ/י לדיון

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

אורח
הוסף תגובה

דיונים חדשים