الفرق بين المراجعتين لصفحة: «Arduino/string»

من موسوعة حسوب
لا ملخص تعديل
إضافة محتويات الصفحة.
 
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 1: سطر 1:
يمكن تمثيل السلاسل النصية بطريقين. فإمَّا أن تستخدم السلاسل النصية كأحد أنواع البيانات في أردوينو والذي أصبح جزءًا من النواة بدءًا من الإصدار 0019، أو يمكن إنشاء سلسلة نصية من مصفوفة من المحارف مع وجود المحرف null في نهايتها. تشرح هذه الصفحة الطريقة الثانية . لمزيد من التفاصيل حول الكائن <code>[[Arduino/stringobject|String]]</code> الذي يوفر الكثير من الوظائف على حساب الذاكرة، اطلع على [[Arduino/stringobject|صفحة]] توثيقه.
<noinclude>{{DISPLAYTITLE:السلاسل النصية في  أردوينو}}</noinclude>
 
يمكن تمثيل السلاسل النصية بطريقين. فإمَّا أن تُستخدَم [[Arduino/stringobject|السلاسل النصية]] كأحد أنواع البيانات في أردوينو والذي أصبح جزءًا من النواة ابتداءً من الإصدار 0019، أو يمكن إنشاء سلسلة نصية من مصفوفة من المحارف مع وجود المحرف <code>null</code> في نهايتها؛ ستُشرَح الطريقة الثانية في هذه الصفحة، إذ شُرحَت الطريقة الأولى بالتفصيل في توثيق الكائن <code>[[Arduino/stringobject|string]]</code> الذي يوفر الكثير من الوظائف والأدوات للتعامل مع السلاسل النصية ولكن على حساب الذاكرة.
== البنية العامة ==
==البنية العامة==
جميع الأمثلة التالية هي تصريحات صالحة للسلاسل النصية:<syntaxhighlight lang="arduino">
جميع الأمثلة التالية هي تصريحات صالحة للسلاسل النصية:<syntaxhighlight lang="arduino">
char Str1[15];
char Str1[15];
سطر 10: سطر 10:
char Str6[15] = "arduino";
char Str6[15] = "arduino";
</syntaxhighlight>يوجد عدَّة احتمالات متاحة للتصريح عن السلاسل النصية هي:
</syntaxhighlight>يوجد عدَّة احتمالات متاحة للتصريح عن السلاسل النصية هي:
* التصريح عن مصفوفة من المحارف دون تهيئتها كما في المصفوفة Str1.
*التصريح عن مصفوفة من المحارف دون تهيئتها كما في المصفوفة <code>Str1</code>.
* التصريح عن مصفوفة من المحارف (مع زيادة محرف إضافي) وسيضيف المصرَّف المحرف null المطلوب مثل المصفوفة Str2.
*التصريح عن مصفوفة من المحارف (مع زيادة حجمها لتتسع لمحرف إضافي)، وسيضيف المُصرَّف المحرف <code>null</code> المطلوب تلقائيًّا مثل المصفوفة <code>Str2</code>.
* هذه الحالة تشبه الحالة السابقة تمامًا باستثناء إضافة المحرف null بشكل صريح إلى المصفوفة مثل المصفوفة Str3.
*هذه الحالة تشبه الحالة السابقة تمامًا باستثناء إضافة المحرف <code>null</code> بشكل صريح إلى المصفوفة مثل حالة المصفوفة <code>Str3</code>.
* تهيئة المصفوفة بسلسلة نصية ثابتة التي تعطى ضمن علامتي اقتباس؛ سيختار المصرِّف عند تصريفه للشيفرة حجمًا ملائمًا للمصفوفة يسع السلسلة النصية الثابتة مع محرف الإنهاء null. انظر إلى المصفوفة Str4 التي تشرح هذه الحالة.
*تهيئة المصفوفة بسلسلة نصية ثابتة تعطى ضمن علامتي اقتباس؛ سيختار المُصرِّف عند تصريفه للشيفرة حجمًا ملائمًا للمصفوفة يسع السلسلة النصية الثابتة مع محرف الإنهاء <code>null</code>. انظر إلى المصفوفة <code>Str4</code> التي تشرح هذه الحالة.
* تهيئة المصفوفة مع تحديد حجمها بصريح العبارة مثل المصفوفة Str5.
*تهيئة المصفوفة مع تحديد حجمها بصريح العبارة مثل المصفوفة <code>Str5</code>.
* تهيئة المصفوفة مع اختيار حجم زائد لتوفير إمكانية لسلسلة نصية أكبر مستقبلًا. انظر مثلًا إلى المصفوفة Str6 التي تمثِّل هذه الحالة.
*تهيئة المصفوفة مع اختيار حجم زائد لتوفير إمكانية لسلسلة نصية أكبر مستقبلًا؛ انظر مثلًا إلى المصفوفة <code>Str6</code>.
===محرف الإنهاء <code>null</code>===
عمومًا، تُنهَى السلاسل النصية بالمحرف <code>null</code> (المحرف ASCII 0). هذا يسمح للدوال (مثل الدالة <code>[[Arduino/serial/print|Serial.print()‎]]</code>) بمعرفة نهاية السلسلة النصية عند قراءتها أو جلبها من الذاكرة. إن لم يكن محرف الإنهاء موجودًا، فستُكمِل الدالة قراءة أو جلب البايتات المتلاحقة الموجودة في الذاكرة التي قد لا تكون جزءًا من السلسلة النصية نفسها.


=== محرف الإنهاء null ===
هذا يعني أنَّه يجب أن تملك أيَّة سلسلة نصية مساحةً إضافيةً لمحرف زائد إضافةً إلى المحتوى الذي تريد تخزينه في السلسلة. هذا هو السبب الذي يفسِّر حاجة المصفوفة <code>Str2</code> والمصفوفة <code>Str5</code> إلى حجم بمقدار 8 رغم أنَّ حجم العبارة "arduino" هو 7 فقط، إذ سيُضاف في الموضع الأخير المتاح المحرف <code>null</code> تلقائيًّا. بالنسبة للمصفوفة <code>Str4</code>، سيحدَّد حجمها إلى 8 محارف تلقائيًّا مع أخذ محرف الإنهاء بالحسبان. في المصفوفة <code>Str3</code>، أضفنا المحرف <code>null</code> بصريح العبارة (يُكتَب '0\') يدويًّا.
عمومًا، تُنهَى السلاسل النصية بالمحرف null (المحرف ASCII 0). هذا يسمح للدوال (مثل الدالة Serial.print()) بأن تعرف نهاية السلسلة النصية في الذاكرة. إن لم يكن محرف الإنهاء موجودًا، فستكمل الدالة قراءة البايتات المتلاحقة الموجودة في الذاكرة التي قد لا تكون جزءًا من السلسلة النصية نفسها.


هذا يعني أنَّ أي سلسلة نصية يجب أن تملك مساحة إضافية لمحرف زائد إضافةً إلى المحتوى الذي تريد تخزينه في السلسلة. هذا هو السبب الذي يفسِّر حاجة المصفوفة Str2 والمصفوفة Str5 إلى الحجم 8 رغم أنَّ حجم العبارة "arduino" هو 7 فقط، إذ سيُضاف في الموضع الأخير المتاح المحرف null تلقائيًّا. بالنسبة للمصفوفة Str4، سيحدَّد حجمها إلى 8 تلقائيًّا مع حساب موضع
انتبه إلى أنَّه من المحتمل وجود سلسلة نصية لا تملك محرف إنهاءٍ (مثل تحديد حجم المصفوفة <code>Str2</code> إلى 7 بدلًا من 8). سيؤدي هذا إلى حدوث خلل في أغلب الدوال التي تتعامل مع السلاسل النصية، لذا يجب عليك تجنب فعل ذلك من غير قصد. إن لاحظت أنَّ سلوك البرنامج أصبح غريبًا بعض الشيء (خصوصًا عند التعامل مع المحارف وليس مع السلاسل النصية)، فيُحتمَل غالبًا أن يكون محرف الإنهاء هو سبب المشكلة.
 
===علامتي الإقتباس المفردة والمزدوجة===
== المعاملات ==
تعرَّف السلاسل النصية دومًا داخل علامتي اقتباس مزدوجتين مثل "ABC"، وتعرَّف المحارف دومًا داخل علامتي اقتباس مفردتين مثل 'A'.
 
===التفاف السلاسل النصية الطويل===
=== <code>val</code> ===
يمكن للسلاسل النصية الطويل الالتفاف والانتقال إلى السطر التالي بالشكل:<syntaxhighlight lang="arduino">
المتغير أو القيمة المراد تنسيقها كسلسلة نصية. نوع البيانات المسموح بها هي: سلسلة نصية، [[Arduino/char|ومحرف]]، [[Arduino/byte|وبايت]]، [[Arduino/int|وعدد صحيح]]، [[Arduino/unsignedint|وعدد صحيح عديم الإشارة]]، [[Arduino/unsignedlong|وعدد طويل عديم الإشارة]]، [[Arduino/float|وعدد عشري]]، [[Arduino/double|وعدد عشري مضاعف]].
char myString[] = "هذا هو السطر الأول"
 
" وهذا السطر الثاني"
=== <code>base</code> ===
" وهلم جرًّا";
معامل اختياري يحدِّد أساس النظام العددي الذي ستُنسَّق فيه القيمة العددية.
</syntaxhighlight>
 
===مصفوفات من سلاسل نصية===
=== <code>decimalPlaces</code> ===
إنَّه من المناسب في كثير من الأحيان عند التعامل مع قدرٍ كبيرٍ من النصوص، مثل العمل على مشروع يحوي شاشة LCD، إنشاء مصفوفة من سلاسل نصية. لمَّا كانت السلاسل النصية هي مصفوفات بحد ذاتها، فسنلجأ في هذه الحالة إلى استعمال مصفوفة ثنائية الأبعاد.
يقيد عدد المنازل العشرية (الأرقام بعد الفاصلة) [[Arduino/float|للعدد العشري]] أو [[Arduino/double|العدد العشري المضاعف]].


== القيم المعادة ==
في المثال الآتي، وجود المعامل <code>[[Arduino/pointer access operators/dereference|*]]</code> بعد تعريف نوع البيانات الذي هو <code>[[Arduino/char|char]]</code> بالشكل "*char" يشير إلى أنَّ المصفوفة المراد التصريح عنها هي مصفوفة من المؤشِّرات (pointers). حقيقيةً، جميع المصفوفات هي مؤشِّرات، لذا استعمال المعامل <code>[[Arduino/pointer access operators/dereference|*]]</code> بهذا الشكل مهم لإنشاء مصفوفةٍ من مصفوفات. المؤشرات في لغة C معقدةٌ بعض الشيء ولا يفهمها الكثير من المبرمجين المبتدئين، ولكن يكفي فهم المؤشرات بشكل سطحي فقط للتعامل معها في حالتنا هذه.
تعاد نسخة من الصنف <code>String</code> تحوي القيمة <code>val</code>.
==أمثلة==
مثالٌ على تعريف مصفوفة من مصفوفات باستعمال المعامل <code>[[Arduino/pointer access operators/dereference|*]]</code> وطباعة محتوي هذه المصفوفة على [[Arduino/serial|الواجهة التسلسلية]]:<syntaxhighlight lang="arduino">
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};


== أمثلة ==
void setup(){
جميع الأمثلة التالية هي أمثلة صحيحة لاستعمال الدالة <code>String()‎</code>:<syntaxhighlight lang="arduino">
Serial.begin(9600);
String stringOne = "Hello String";                        // استعمال سلسلة نصية ثابتة
}
String stringOne =  String('a');                          // تحويل محرف ثابت إلى سلسلة نصية
String stringTwo =  String("This is a string");          // String تحويل سلسلة نصية ثابتة إلى كائن من النوع
String stringOne =  String(stringTwo + " with more");    // جمع سلسلتين نصيتين مع بعضهما بعضًا
String stringOne =  String(13);                          // استعمال عدد صحيح ثابت
String stringOne =  String(analogRead(0), DEC);          // استعمال عدد صحيح مع تحديد الأساس المستعمل
String stringOne =  String(45, HEX);                      // "استعمال عدد صحيح مع تحديد الأساس  إلى "ست عشري
String stringOne =  String(255, BIN);                    // "استعمال عدد صحيح مع تحديد الأساس إلى "ثنائي
String stringOne =  String(millis(), DEC);               // استعمال عدد طويل مع تحديد الأساس المستعمل
String stringOne =  String(5.698, 3);                    // استعمال عدد عشري مع تحديد عدد المنازل العشرية


void loop(){
for (int i = 0; i < 6; i++){
  Serial.println(myStrings[i]);
  delay(500);
  }
}
</syntaxhighlight>
</syntaxhighlight>
==انظر أيضًا==
* الدالة <nowiki/>[[Arduino/stringobject|<code>()string</code>]]: تنشئ نسخةً من الصنف <code>String</code> الذي يوفِّر الكثير من الأدوات للتعامل مع السلاسل النصية وإجراء عمليات عليها.


== الدوال ==
* النوع <code>[[Arduino/array|array]]</code>: يمثِّل مصفوفة من المتغيرات الموضوعة في وعاء واحد والتي يمكن الوصول إليها والتعامل معها عبر رقم فهرس كلٍّ منها.
=== <code>[[Arduino/string/charat|Arduino/string/charat]]</code> ===
* النوع <code>[[Arduino/bool|bool]]</code>: يخزِّن المتغير الذي يصرَّح عنه بأنَّه من النوع [[Arduino/bool|<code>bool</code>]] إحدى القيمتين المنطقيَّتين التاليتين: <code>[[Arduino/constants#.D8.A7.D9.84.D8.AB.D8.A7.D8.A8.D8.AA true|true]]</code>، أو <code>[[Arduino/constants#.D8.A7.D9.84.D8.AB.D8.A7.D8.A8.D8.AA false|false]]</code> عبر حجز بايتٍ واحدٍ من الذاكرة فقط.
=== <code>[[Arduino/string/compareto|Arduino/string/compareto]]</code> ===
* النوع <code>[[Arduino/byte|byte]]</code>: يُخزِّن عددًا عديم الإشارة بحجم 8 بت؛ أي من القيمة 0 إلى القيمة 255.
=== <code>[[Arduino/string/concat|Arduino/string/concat]]</code> ===
* النوع <code>[[Arduino/char|char]]</code>: يحجز بايتًا واحدًا من الذاكرة ويخزِّن فيه قيمة محرف.
=== <code>[[Arduino/string/c_str|Arduino/string/c_str]]</code> ===
* النوع <code>[[Arduino/double|double]]</code>: يحجز أربعة بايتات (32 بت) من الذاكرة فقط في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega) أو ثمانية بايتات (64 بت) في اللوحات Due لتخزين عدد عشري فيها.
=== <code>[[Arduino/string/endswith|Arduino/string/endswith]]</code> ===
* النوع <code>[[Arduino/float|float]]</code>: يحجز أربعة بايتات (32 بت) من الذاكرة لتخزين عدد عشري فيها.
=== <code>[[Arduino/string/equals|Arduino/string/equals]]</code> ===
* النوع <code>[[Arduino/int|int]]</code>: يحجز حجمًا مقداره 16 بت (2 بايت) من الذاكرة في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega)  أو 32 بت (4 بايت) في لوحات أردوينو Due (والتي تعتمد على متحكمات SAMD) لتخزين عدد صحيح فيه.
=== <code>[[Arduino/string/equalsignorecase|Arduino/string/equalsignorecase]]</code> ===
* النوع <code>[[Arduino/long|long]]</code>: يحجز حجمًا كبيرًا من الذاكرة مقداره 4 بايت يستعمل لتخزين الأعداد الصحيحة التي تتسم بأنَّها طويلة.
=== <code>[[Arduino/string/getbytes|Arduino/string/getbytes]]</code> ===
* النوع <code>[[Arduino/short|short]]</code>: يحجز في جميع لوحات أردوينو (التي تعتمد على المتحكمات ATMega و ARM) حجمًا من الذاكرة مقداره 16 بت (2 بايت) لتخزين عدد قصير فيه.
=== <code>[[Arduino/string/indexof|Arduino/string/indexof]]</code> ===
* النوع <code>[[Arduino/unsignedchar|unsigned char]]</code>: يحجز حجمًا من الذاكرة مقداره 1 بايت فقط.
=== <code>[[Arduino/string/lastindexof|Arduino/string/lastindexof]]</code> ===
* النوع <code>[[Arduino/unsignedint|unsigned int]]</code>: يحجز حجمًا من الذاكرة مقداره 2 بايت في لوحات أردونيو Uno واللوحات التي تعتمد على متحكمات ATMega أو 4 بايت في لوحات أردوينو Due لتخزين عدد صحيح عديم الإشارة فيها.
=== <code>[[Arduino/string/length|Arduino/string/length]]</code> ===
* النوع <code>[[Arduino/unsignedlong|unsigned long]]</code>: يحجز حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد الصحيحة عديمة الإشارة التي تتسم بأنَّها طويلة.
=== <code>[[Arduino/string/remove|Arduino/string/remove]]</code> ===
* النوع <code>[[Arduino/word|word]]</code>: يُخزِّن أعدادًا عديم الإشارة بحجم 2 بايت.
=== <code>[[Arduino/string/replace|Arduino/string/replace]]</code> ===
=== <code>[[Arduino/string/reserve|Arduino/string/reserve]]</code> ===
=== <code>[[Arduino/string/setcharat|Arduino/string/setcharat]]</code> ===
=== <code>[[Arduino/string/startswith|Arduino/string/startswith]]</code> ===
=== <code>[[Arduino/string/substring|Arduino/string/substring]]</code> ===
=== <code>[[Arduino/string/tochararray|Arduino/string/tochararray]]</code> ===
=== <code>[[Arduino/string/toint|Arduino/string/toint]]</code> ===
=== <code>[[Arduino/string/tofloat|Arduino/string/tofloat]]</code> ===
=== <code>[[Arduino/string/tolowercase|Arduino/string/tolowercase]]</code> ===
=== <code>[[Arduino/string/touppercase|Arduino/string/touppercase]]</code> ===
=== <code>[[Arduino/string/trim|Arduino/string/trim]]</code> ===
== المعاملات ==
=== <code>[[Arduino/string/elementaccess|Arduino/string/elementaccess]]</code> ===
=== <code>[[Arduino/string/concatenation|Arduino/string/concatenation]]</code> ===
=== <code>[[Arduino/string/append|Arduino/string/append]]</code> ===
=== <code>[[Arduino/string/comparison|Arduino/string/comparison]]</code> ===
=== <code>[[Arduino/string/greaterthan|Arduino/string/greaterthan]]</code> ===
=== <code>[[Arduino/string/greaterthanorequalto|Arduino/string/greaterthanorequalto]]</code> ===
=== <code>[[Arduino/string/lessthan|Arduino/string/lessthan]]</code> ===
=== <code>[[Arduino/string/lessthanorequalto|Arduino/string/lessthanorequalto]]</code> ===
=== <code>[[Arduino/string/differentfrom|Arduino/string/differentfrom]]</code> ===
== انظر أيضًا ==


== مصادر ==
==مصادر==
* [https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/ صفحة الدالة String في توثيق أردوينو الرسمي.]
*[https://www.arduino.cc/reference/en/language/variables/data-types/string/ صفحة النوع String في توثيق أردوينو الرسمي.]
[[تصنيف: Arduino]]
[[تصنيف: Arduino Data Type]]

المراجعة الحالية بتاريخ 14:57، 26 أكتوبر 2018

يمكن تمثيل السلاسل النصية بطريقين. فإمَّا أن تُستخدَم السلاسل النصية كأحد أنواع البيانات في أردوينو والذي أصبح جزءًا من النواة ابتداءً من الإصدار 0019، أو يمكن إنشاء سلسلة نصية من مصفوفة من المحارف مع وجود المحرف null في نهايتها؛ ستُشرَح الطريقة الثانية في هذه الصفحة، إذ شُرحَت الطريقة الأولى بالتفصيل في توثيق الكائن string الذي يوفر الكثير من الوظائف والأدوات للتعامل مع السلاسل النصية ولكن على حساب الذاكرة.

البنية العامة

جميع الأمثلة التالية هي تصريحات صالحة للسلاسل النصية:

char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";

يوجد عدَّة احتمالات متاحة للتصريح عن السلاسل النصية هي:

  • التصريح عن مصفوفة من المحارف دون تهيئتها كما في المصفوفة Str1.
  • التصريح عن مصفوفة من المحارف (مع زيادة حجمها لتتسع لمحرف إضافي)، وسيضيف المُصرَّف المحرف null المطلوب تلقائيًّا مثل المصفوفة Str2.
  • هذه الحالة تشبه الحالة السابقة تمامًا باستثناء إضافة المحرف null بشكل صريح إلى المصفوفة مثل حالة المصفوفة Str3.
  • تهيئة المصفوفة بسلسلة نصية ثابتة تعطى ضمن علامتي اقتباس؛ سيختار المُصرِّف عند تصريفه للشيفرة حجمًا ملائمًا للمصفوفة يسع السلسلة النصية الثابتة مع محرف الإنهاء null. انظر إلى المصفوفة Str4 التي تشرح هذه الحالة.
  • تهيئة المصفوفة مع تحديد حجمها بصريح العبارة مثل المصفوفة Str5.
  • تهيئة المصفوفة مع اختيار حجم زائد لتوفير إمكانية لسلسلة نصية أكبر مستقبلًا؛ انظر مثلًا إلى المصفوفة Str6.

محرف الإنهاء null

عمومًا، تُنهَى السلاسل النصية بالمحرف null (المحرف ASCII 0). هذا يسمح للدوال (مثل الدالة Serial.print()‎) بمعرفة نهاية السلسلة النصية عند قراءتها أو جلبها من الذاكرة. إن لم يكن محرف الإنهاء موجودًا، فستُكمِل الدالة قراءة أو جلب البايتات المتلاحقة الموجودة في الذاكرة التي قد لا تكون جزءًا من السلسلة النصية نفسها.

هذا يعني أنَّه يجب أن تملك أيَّة سلسلة نصية مساحةً إضافيةً لمحرف زائد إضافةً إلى المحتوى الذي تريد تخزينه في السلسلة. هذا هو السبب الذي يفسِّر حاجة المصفوفة Str2 والمصفوفة Str5 إلى حجم بمقدار 8 رغم أنَّ حجم العبارة "arduino" هو 7 فقط، إذ سيُضاف في الموضع الأخير المتاح المحرف null تلقائيًّا. بالنسبة للمصفوفة Str4، سيحدَّد حجمها إلى 8 محارف تلقائيًّا مع أخذ محرف الإنهاء بالحسبان. في المصفوفة Str3، أضفنا المحرف null بصريح العبارة (يُكتَب '0\') يدويًّا.

انتبه إلى أنَّه من المحتمل وجود سلسلة نصية لا تملك محرف إنهاءٍ (مثل تحديد حجم المصفوفة Str2 إلى 7 بدلًا من 8). سيؤدي هذا إلى حدوث خلل في أغلب الدوال التي تتعامل مع السلاسل النصية، لذا يجب عليك تجنب فعل ذلك من غير قصد. إن لاحظت أنَّ سلوك البرنامج أصبح غريبًا بعض الشيء (خصوصًا عند التعامل مع المحارف وليس مع السلاسل النصية)، فيُحتمَل غالبًا أن يكون محرف الإنهاء هو سبب المشكلة.

علامتي الإقتباس المفردة والمزدوجة

تعرَّف السلاسل النصية دومًا داخل علامتي اقتباس مزدوجتين مثل "ABC"، وتعرَّف المحارف دومًا داخل علامتي اقتباس مفردتين مثل 'A'.

التفاف السلاسل النصية الطويل

يمكن للسلاسل النصية الطويل الالتفاف والانتقال إلى السطر التالي بالشكل:

char myString[] = "هذا هو السطر الأول"
" وهذا السطر الثاني"
" وهلم جرًّا";

مصفوفات من سلاسل نصية

إنَّه من المناسب في كثير من الأحيان عند التعامل مع قدرٍ كبيرٍ من النصوص، مثل العمل على مشروع يحوي شاشة LCD، إنشاء مصفوفة من سلاسل نصية. لمَّا كانت السلاسل النصية هي مصفوفات بحد ذاتها، فسنلجأ في هذه الحالة إلى استعمال مصفوفة ثنائية الأبعاد.

في المثال الآتي، وجود المعامل * بعد تعريف نوع البيانات الذي هو char بالشكل "*char" يشير إلى أنَّ المصفوفة المراد التصريح عنها هي مصفوفة من المؤشِّرات (pointers). حقيقيةً، جميع المصفوفات هي مؤشِّرات، لذا استعمال المعامل * بهذا الشكل مهم لإنشاء مصفوفةٍ من مصفوفات. المؤشرات في لغة C معقدةٌ بعض الشيء ولا يفهمها الكثير من المبرمجين المبتدئين، ولكن يكفي فهم المؤشرات بشكل سطحي فقط للتعامل معها في حالتنا هذه.

أمثلة

مثالٌ على تعريف مصفوفة من مصفوفات باستعمال المعامل * وطباعة محتوي هذه المصفوفة على الواجهة التسلسلية:

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

void setup(){
Serial.begin(9600);
}

void loop(){
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}

انظر أيضًا

  • الدالة ()string: تنشئ نسخةً من الصنف String الذي يوفِّر الكثير من الأدوات للتعامل مع السلاسل النصية وإجراء عمليات عليها.
  • النوع array: يمثِّل مصفوفة من المتغيرات الموضوعة في وعاء واحد والتي يمكن الوصول إليها والتعامل معها عبر رقم فهرس كلٍّ منها.
  • النوع bool: يخزِّن المتغير الذي يصرَّح عنه بأنَّه من النوع bool إحدى القيمتين المنطقيَّتين التاليتين: true، أو false عبر حجز بايتٍ واحدٍ من الذاكرة فقط.
  • النوع byte: يُخزِّن عددًا عديم الإشارة بحجم 8 بت؛ أي من القيمة 0 إلى القيمة 255.
  • النوع char: يحجز بايتًا واحدًا من الذاكرة ويخزِّن فيه قيمة محرف.
  • النوع double: يحجز أربعة بايتات (32 بت) من الذاكرة فقط في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega) أو ثمانية بايتات (64 بت) في اللوحات Due لتخزين عدد عشري فيها.
  • النوع float: يحجز أربعة بايتات (32 بت) من الذاكرة لتخزين عدد عشري فيها.
  • النوع int: يحجز حجمًا مقداره 16 بت (2 بايت) من الذاكرة في لوحات أردوينو Uno (والتي تعتمد على متحكمات ATMega) أو 32 بت (4 بايت) في لوحات أردوينو Due (والتي تعتمد على متحكمات SAMD) لتخزين عدد صحيح فيه.
  • النوع long: يحجز حجمًا كبيرًا من الذاكرة مقداره 4 بايت يستعمل لتخزين الأعداد الصحيحة التي تتسم بأنَّها طويلة.
  • النوع short: يحجز في جميع لوحات أردوينو (التي تعتمد على المتحكمات ATMega و ARM) حجمًا من الذاكرة مقداره 16 بت (2 بايت) لتخزين عدد قصير فيه.
  • النوع unsigned char: يحجز حجمًا من الذاكرة مقداره 1 بايت فقط.
  • النوع unsigned int: يحجز حجمًا من الذاكرة مقداره 2 بايت في لوحات أردونيو Uno واللوحات التي تعتمد على متحكمات ATMega أو 4 بايت في لوحات أردوينو Due لتخزين عدد صحيح عديم الإشارة فيها.
  • النوع unsigned long: يحجز حجمًا كبيرًا من الذاكرة مقداره 4 بايت يُستعمَل لتخزين الأعداد الصحيحة عديمة الإشارة التي تتسم بأنَّها طويلة.
  • النوع word: يُخزِّن أعدادًا عديم الإشارة بحجم 2 بايت.

مصادر