180 likes | 204 Views
פוינטרים ומבנים. אתחול והדפסת מערך. #include <stdio.h> #include <stdlib.h> int * readArray( int size){ int *a, i; a= ( int *) malloc (size* sizeof ( int )); if (!a) return NULL; for (i=0;i<size;i++) scanf("%d",a+i); return a; } void printArray ( int * a, int size){
E N D
אתחול והדפסת מערך #include <stdio.h> #include <stdlib.h> int * readArray(int size){ int *a, i; a= (int *) malloc (size* sizeof(int)); if (!a) return NULL; for (i=0;i<size;i++) scanf("%d",a+i); return a; } void printArray (int * a, int size){ int i; for (i=0;i<size;i++) printf ("%d\n",*(a+i));/* a[i] */ }
שימוש ב main void main(){ int *arr, n; printf ("Enter size of array\n"); scanf("%d",&n); arr=readArray(n); if (arr==NULL) exit(0); printArray(arr,n); free(arr); }
מערך דו מימדי, האמנם? #include <stdio.h> #include <string.h> void main(){ char a2dim[4][3],i,j; strcpy(a2dim,"Hello world"); for (i=0;i<4;i++){ for (j=0;j<3;j++) printf("%c",a2dim[i][j]); printf("\n"); } }
מערך דו מימדי באמצעות מצביעים int ** create2Dim(int rows, int cols){ int **a, i; if (!(a=(int **)(malloc (rows* sizeof (int *))))) return NULL; for (i=0;i<rows;i++) if (!(a[i]=(int *)(malloc (cols* sizeof (int))))) return NULL; return a; }
שחרור מערך דו מימדי דינאמי void free2Dim(int ** a, int rows){ int i; for (i=0;i<rows;i++) free(a[i]); free(a); }
מערך דו מימדי באמצעות מצביעים int ** create2Dim(int rows, int cols){ int **a, i; if (!(a=(int **)(malloc (rows* sizeof (int *))))) return NULL; for (i=0;i<rows;i++) if (!(a[i]=(int *)(malloc (cols* sizeof (int))))){ free2Dim(a,i); return NULL; } return a; }
מבנה הסטודנט struct student{ char name[30]; long id; int grades[8]; };
יצירת סטודנט void main(){ struct student st1; strcpy (st1.name,"Shimon"); st1.id=1234; scanf ("%d",&st1.grades[0]); printf("name: %s, id: %d, grade: %d\n", st1.name,st1.id,st1.grades[0]); }
סוגי אתחול void main(){ struct student st1= {"Shimon",56689,{80,65,17}}; struct student st2; st2=st1; st1.name[2]='u'; st1.name[4]='a'; printf("%s\n",st1.name); printf("%s\n",st2.name); }
מבני הנקודה והמלבן typedefstruct point{ double x; double y; }point; typedefstruct rectangle{ struct point p1; struct point p2; }rectangle;
void main(){ point p, pt = {5.7,6.3}; rectangle rec1, rec2; p.x = 9; p.y = 17.1; rec1.p1 = pt; rec1.p2 = p; rec2.p1.x = 3.5; }
פונקציות עם מבנים point middle (point p1,point p2){ point p3; p3.x=(p1.x + p2.x)/2; p3.y=(p1.y + p2.y)/2; return p3; } void main(){ point p, pt = {5.7,6.3},pMid; p.x = 9; p.y = 17.1; pMid=middle(p,pt); }
מצביעים למבנים void main(){ struct student * p; p=(struct student *) malloc(sizeof(struct student)); if (!p) return; (*p).id=112233; p->id=112233; free(p); }
רשימה משורשרת typedefstruct link{ int data; struct link * next; }link;
יצירת רשימה void main(){ link *head=NULL, *temp=NULL; int d; printf("Enter the list values:\n"); scanf ("%d",&d); while (d!=-1){ temp=(link *)malloc(sizeof(link)); if (!temp) break; temp->next=head; temp->data=d; head=temp; scanf ("%d",&d); } לא לאבד את הראש!!!
הדפסה ושחרור while(temp){ printf("%d ",temp->data); temp=temp->next; } while (head){ temp=head->next; free(head); head=temp; } } לא לאבד את הראש!!!