לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 04-11-2007, 04:03
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
[בשפת C] אי-הבנה של גדלי סוגי משתנים

הרצתי את התכנית הבאה, התוצאות רשומות בצורת הערה:

קוד:
#include "stdafx.h" #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> typedef struct { int a; float arr[10]; char c; }struct_type; struct_type s; int main(array<System::String ^> ^args) { char c; int n; double d; printf("Size of type int is: %d\n", sizeof(int)); //4 bytes printf("Size of type char is: %d\n", sizeof(char)); // 1 byte printf("size of type double is: %d\n", sizeof(double)); //8 bytes printf("size of type struct_type is:%d\n\n", sizeof(struct_type)); // 48 bytes printf("Size of variable n is: %d\n", sizeof(n)); // 4 bytes printf("Size of variable c is: %d\n", sizeof(c)); // 1 byte printf("Size of variable d is: %d\n", sizeof(d)); //8 bytes printf("Size of variable sis: %d\n", sizeof(s)); //48 bytes getch(); }


אני לא מבין:
(1) איך זה שסוג int הוא בגודל 4 בתים(!) כשהוא צריך להיות 2 בתים.
(2) למה גודל ה-struct הוא 48 בתים? איך הגיעו לזה? לפי החישוב שלי זה צריך להיות:
קוד:
4 + 4 * 10 + 1 = 45 4 -> int 4 * 10 -> float arr[10] 1 -> char

(3) למה כשאני מוסיף ל-struct עוד משתנים מסוג char, גודל ה-struct אינו משתנה, אך כשאני מוסיף משתנים מסוג double, גודל ה-struct כן עולה?

תודה רבה!
כנראה בהמשך אפציץ אותכם בשאלות נוספות

נערך לאחרונה ע"י DCD בתאריך 04-11-2007 בשעה 04:05.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 04-11-2007, 05:15
  משתמש זכר zivbr zivbr אינו מחובר  
 
חבר מתאריך: 22.01.05
הודעות: 715
בתגובה להודעה מספר 1 שנכתבה על ידי DCD שמתחילה ב "[בשפת C] אי-הבנה של גדלי סוגי משתנים"

אז ככה לגבי 1: הגודל של int הוא בעקרון הגודל שנוח למחשב לעבוד איתו ולא לפי גודל מסויים- היו זמנים שבהם המחשב היה עובד על 2 בתים(16ביט) והיום זה 4 בתים(32ביט) ובקרוב אולי זה יהפוך ל8 בתים(64ביט) - הכל קשור לטכנולוגיה כרגע.

לגבי שאלה מספר 2: אם היית משחק קצת היית מגלה שכשאתה מכניס char אחד למבנה פתאום קופץ הגודל ב 4 בתים במקום אחד! ולמה זה קורה? כנראה בשביל ביצועים(שוב, מעבדים בנויים בצורה מסויימת ולכן מתאימים את התוכנות למעבדים. יכול להיות שקומפיילרים מסויימים לא יעשו את זה) ואם תשים 2 תוים הוא ישים אותם על 2 מתוך ה 4 וכו'.
וכאן גם נכנסת השאלה השלישית - הגודל לא עולה כשאתה מוסיף chars בגלל שהוא שומר 4 בתים ל 4 תוים ביחד ואם תשים 5 תוים תגלה פתאום שבמקום 5 בתים יהיו לך 8 בתים. הכל אפשר ללמוד עם קצת עבודת debugging לא קשה.
תבדוק את כל מה שאמרתי ותראה איך הכל עובד.
בהצלחה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 04-11-2007, 15:28
צלמית המשתמש של דור
  דור דור אינו מחובר  
 
חבר מתאריך: 09.04.02
הודעות: 8,000
בתגובה להודעה מספר 3 שנכתבה על ידי DCD שמתחילה ב "אה הבנתי... אז הקומפלייר של C..."

ציטוט:
אז הקומפלייר של C (? קומפילר של מי בעצם? אני משתמש ב-Visual Studio 2005)
הקומפיילר VS הוא של מייקרוסופט, לא של C
ציטוט:
לפי מה שהבנתי זה קורה רק במחלקה (struct).
struct הוא לא מחלקה.
ציטוט:
מהו הקומפלייר שהוא הכי עדיף? כי אם אני מריץ את התוכנית שלי בקומפיילר אחד, ומנסה לקמפל את זה בקומפיילר אחר, יהיה שגיאות, אז אני רוצה לדעת מהו הקומפיילר שהרוב משתמשים בו.

אין קומפיילר שהוא הכי עדיף באותה מידה שאין מערכת הפעלה שהיא הכי עדיפה.
המון משתמשים ב-GCC, המון משתמשים ב-VS, והמון משתמשים ב-Borland. תבחר אחד שנוח לך לעבוד איתו (לאו דווקא מהשלושה האלה) ותשתדל לכתוב לפי התקן.
אם אתה בכל זאת בוחר להשתמש ב-VS, תקפיד לא למלא את הקוד שלך בכל מיני המצאות מוזרות של מייקרוסופט, והכל יהיה בסדר...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 04-11-2007, 19:11
  DCD DCD אינו מחובר  
 
חבר מתאריך: 17.05.05
הודעות: 7,321
בתגובה להודעה מספר 4 שנכתבה על ידי דור שמתחילה ב "[QUOTE]אז הקומפלייר של C (?..."

אהא...

ציטוט:
struct הוא לא מחלקה


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

ציטוט:
אין קומפיילר שהוא הכי עדיף באותה מידה שאין מערכת הפעלה שהיא הכי עדיפה.
המון משתמשים ב-GCC, המון משתמשים ב-VS, והמון משתמשים ב-Borland. תבחר אחד שנוח לך לעבוד איתו (לאו דווקא מהשלושה האלה) ותשתדל לכתוב לפי התקן.
אם אתה בכל זאת בוחר להשתמש ב-VS, תקפיד לא למלא את הקוד שלך בכל מיני המצאות מוזרות של מייקרוסופט, והכל יהיה בסדר...


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

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

תודה

נערך לאחרונה ע"י DCD בתאריך 04-11-2007 בשעה 19:15.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 18:53

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר