كود PHP:
#include<stdio.h>
#include<stdlib.h>
void copy(char *from,char * to );
char *array, *array2;
main()
{
array2=(malloc(20*(sizeof(char))));
array=(malloc(20*(sizeof(char))));
printf("enter a string to store in array:\n");
gets(array);
printf("\nyou posted %s",array);
printf("\ni will copy it");
copy(array,array2);
}
void copy (char *from , char *to)
{
array2=array;
printf("\narray2=%s",array2);
}
كود PHP:
#include<stdio.h>
#include<stdlib.h>
void copy(char *from,char * to );
char array[20], array2[20];
main()
{
printf("enter a string to store in array:\n");
gets(array);
printf("\nyou posted %s",array);
printf("\ni will copy it");
copy(array,array2);
}
void copy (char *from , char *to)
{
int count;
for(count=0;count<20;count++)
{
array2[count]=array[count];
}
printf("\narray2=%s",array2);
}
كود PHP:
#include<stdio.h>
#include<stdlib.h>
وهنا استدعينا stdlib لانها تحتوي علي malloc function prototype
كود PHP:
كود PHP:
void copy(char *from,char * to );
يعني داله ذات مؤشرين كمدخلات اليها راجع درس الفنكشنس بتاعي
char *array, *array2;
مؤشرين من النوع char
كود PHP:
كود PHP:
array2=(malloc(20*(sizeof(char))));
array=(malloc(20*(sizeof(char))));
كيف يتم تخزين عناصر المصفوفات في الذاكره ؟
ماعلاقة هذا بهذا البرنامج ؟
العلاقه سهله وواضحه جدا لمن عنده معرفه بالمصفوفات
اذا كانت المصفوفه من النوع int فان كل عنصر فيها يحتاج 2 byt من الذاكره
اذن العنصر التالي سوف ياخذ علي سبيل المثال 1002 والثالث 1004 من مواقع الذاكره
حسناا هذا جيد ولكن ايضا ما علاقة هذا بالبرنامج انت الان قمت بتعريف مؤشر وقد قمت باستخدام maloc يكلي تحصل علي ذاكره فارغه يؤشر اليها هذا المؤشر وهيذ الذاكره قدرها 20 بايت
لكن هل تضمن ان كل جهاز يتعامل معه هذا البرنامج يكون المتغير char ياخذ فيه i1 بايت فقط؟؟؟
بالتاكيد لا
اذن انت تتضربها في قيمة sizeof(char) اذا كان 1 اذن 20 * 1 = 20
اذا كان علي جهاز اخر 2 يكون 20*2=40 وهكذا
اذن انت تضع كل حرف في كل اثنين بايت
ولكن الشائع هو بايت واحد فقط
وهذه هي صيغة malloc
كود PHP:
malloc(size);
كود PHP:
printf("enter a string to store in array:\n");
gets(array);
كود PHP:
printf("\nyou posted %s",array);
printf("\ni will copy it");
copy(array,array2);
كود PHP:
void copy (char *from , char *to)
{
array2=array;
printf("\narray2=%s",array2);
}
راعي اننا هنا قمنا بتميير مؤشرات الي الداله ك arguments
array2=array;
ببساطه شديده تعني
اجعل المؤشر array2 يساوي اول عنوان في array كيف ؟؟؟؟؟
ولكن ذلك سوف يجعله يطبع اول حرف فقط في ماادخلت ؟
لا هذا سوف يفعل الاتي
ياخذ اول عنوان للذاكره
ويظل يطبع مافيها الي ان يصادف \0 وهذه هي علامة انتهاء السلسله النصيه او المصفوفه
فبالتالي سوف تاخذ القيمه المسجله في الذاكره كلها حتي تنتهي
نفس الشرح في الكود الثاني مع اختلاف
كود PHP:
for(count=0;count<20;count++)
{
array2[count]=array[count];
}
اجل ولكن بدون sup script اي [] وفي هذه الحاله نحن نسند قيم الي المصفوفه الثانيه فبالتالي احتاج الي عدااد كي يقوم بعد عناصر المصفوفوه الاولي ويضعها في المصفوفه الثانيه
وراي اننا ايضا استخدمنا مؤشرات هنا
وراعي اننا مررنا اسم المصفوفات بدون supscript الي الداله لانه لايمكن استخدام عناصر المصفوفه كلها ك arguments راجع درس المصفوفات
ونفس نقطة معرفة النهايه هي هي نفس
ويظل يطبع مافيها الي ان يصادف \0 وهذه هي علامة انتهاء السلسله النصيه او المصفوفه
ديت لاثبات ان ال array name with out sup script is a pointer to the first element
كود PHP:
#include<stdio.h>
#include<stdlib.h>
void copy( char *from,char *to);
int count;
char array[20],*ptr;
main ()
{
ptr=malloc(20 * sizeof(char ));
puts("Enter A string ");
gets(array);
puts("you entred ");
puts(array);
puts("i will copy it ");
copy(array,ptr);
}
void copy(char *from , char *to )
{
ptr=array;
printf("array2=%s",ptr);
}
طبعا مش محتاج شرح
الي عايز يسال يسال
========================================
merge two strings
كود PHP:
كود PHP:
#include<stdio.h>
#include<stdlib.h>
void merg( char * , char *);
main()
{
char *ptr,*ptr2;
ptr=malloc(100 * sizeof(char));
ptr2=malloc(100 * sizeof(char));
puts("HI PUT SOME STRING");
gets(ptr);
puts("you Entred");
puts(ptr);
puts("ENTER Another string");
gets(ptr2);
puts("YOU Entred ");
puts(ptr2);
merg(ptr,ptr2);
}
void merg( char *y , char *x)
{
printf(" Merged string is %s %s",y,x);
}
كود PHP:
#include<stdio.h>
#include<stdlib.h>
int comp( char * , char *);
main()
{
char *ptr,*ptr2,ch;
ptr=malloc(100 * sizeof(char));
ptr2=malloc(100 * sizeof(char));
puts("HI PUT SOME STRING");
gets(ptr);
puts("you Entred");
puts(ptr);
puts("ENTER Another string");
gets(ptr2);
puts("YOU Entred ");
puts(ptr2);
ch=comp(ptr,ptr2);
if(ch==1)
{
printf("strings are compatible");
}
else if (ch==0)
{
printf("strings are'n compatible");
}
}
int comp( char *y , char *x)
{
if(*y == *x)
{
return 1;
}
else
{
return 0;
}
}
كود PHP:
i am just gonna explain this part
if(*y == *x)
{
return 1;
}
else
{
return 0;
هو مش انت قلت قبل كده ان طباعة السلسله بتتم من غير *
وانك قلت انه لما بيطبعها بياخد اول عنون لحد مايوصل ل 0
طيب انت ليه استخدمت *
الموضوع بسيط جدا ياجماعه
هنا انت مش بتطبع
انت بتقارن قيمه مسجله
مش عنوان
وممكن تتاكد بان تشيل *
في كلتا الحالتين لو طبعت جمله متطابقه او غير متطابقه حيديك
strings are'n compatible
لانك في الحاله ديت بتقارن عنواين ذاكره مش قيمه مسجله داخل عناوين الذاكره
ملاحظه : انا مش بنقل مواضيعي من SG عشان ازود مشركاتي ولا عشان اتعرف ولا عشان حد يقولي برافو
كل ما في الامر اني عايز اكسب ولو حسنه باني افيد اي مبتاد زي او اي حاجه
سلام
تعليق