به نام خدا : تمام پروژه های این مطلب در ادیتور ++DEV-C نوشته شدن؛ تو این مطلب چیز خاصی نمیخوام بگیم، یکم درباره آرایه دو بعدی و کار باهاش صحبت میکنیم، هر چند این آرایه دو بعدی هم هر جایی استفاده نمیشه و خب به طبع این مطلب هم به درد هر کسی نمیخوره ^_^ ( آموزش زبان c کار با آرایه دو بعدی )
نحوه تعریف یه آرایه دو بعدی به صورت زیر هستش، در زیر من یه آرایه دو بعدی از نوع int ساختم، شما از هر نوعی دوست داشتین ایجاد کنید :
1 |
int A[m][n]; |
خب بر فرض که ما یه آرایه دو بعدی با نام A و اندازه m در n ایجاد کردیم، اندازه این آرایه ( بر حسب byte ) به صورت زیر محاسبه میشه :
1 |
m*n*sizeof(int) |
خب هر دو نوع تعریف آرایه دو بعدی زیر از دید کامپایلر ( نرم افزاری که توش کد میزنید! ) یکسانه و فرقی نداره، ولی بهتره که از شیوه اول استفاده کنید :
1 2 |
int A[2][3] = { {1,2,3}, {4,5,6} }; int A[2][3] = { 1,2,3, 4,5,6 }; |
برا بررسی صحت حرف من مثال زیر رو تست کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> void main() { int A[2][3] = { {1,2,3}, {4,5,6} }; int B[2][3] = { 1,2,3, 4,5,6 }; int i,j; for( i=0; i<=1; i++ ) { for( j=0; j<=2; j++ ) { printf( "%d, ", A[i][j] ); } } printf("\n"); for( i=0; i<=1; i++ ) { for( j=0; j<=2; j++ ) { printf( "%d, ", A[i][j] ); } } while(1); } |
خب این قسمت خلاصه میگم و زیاد گیجتون نمیکنم، یه آرایه دو بعدی با نام A داریم :
سه روش زیر برای دسترسی به مقدار خونه های آرایه A با هم برابر هستند ( اینا رو برا اطلاعات عمومی گفتم، فعلا از همون روش اول استفاده میکینم تا ببینیم دو تا روش دیگه کجا به کارمون میان ) :
1 2 3 |
A[i][j] *(A[i] + j) *(*(A+i) + j) |
3 روش زیر برای دسترسی به آدرس خونه های آرایه A با هم برابر هستن :
1 2 3 |
&A[i][j] (A[i]+j) (*(A+i)+j) |
توجه : همون طور که از مبحث آرایه 1 بعدی به خاطر دارید، نام آرایه، آدرس خونه اول آرایه هستش.
برا بررسی صحت حرف من مثال زیر رو تست کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> void main() { int A[5][4] = { { 0, 1, 2, 3 }, // A[0][] { 4, 5, 6, 7 }, // A[1][] { 8, 9, 10, 11 }, // A[2][] { 12, 13, 14, 15 }, // A[3][] { 16, 17, 18, 19 } // A[4][] }; // Meghdare KhoneHaye Araye printf( "%d = %d = %d\n", A[0][0], *A[0], **A ); // 0 printf( "%d = %d = %d\n", A[1][2], *(A[1]+2), *(*(A+1)+2) ); // 6 // Address KhoneHaye Araye printf( "%d = %d = %d\n", &A[2][3], (A[2]+3), (*(A+2)+3) ); while(1); } |
در مثال زیر انواع روش هایی که به ذهنم میرسید و میدونستم و رو نوشتم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#include <stdio.h> int A[5][4] = { { 0, 1, 2, 3 }, // A[0][] { 4, 5, 6, 7 }, // A[1][] { 8, 9, 10, 11 }, // A[2][] { 12, 13, 14, 15 }, // A[3][] { 16, 17, 18, 19 } // A[4][] }; void ShowArrayValue1( int Num ) { // Daryafte Meghdar >>> Namayesh ooon Meghdar printf( "%d\n", Num ); } void ShowArrayValue2( int *Adr ) { // Daryafte Address >>> Namayesh Tamam Maghadir int i, j; for( i = 0; i < 5; i++ ) { for( j = 0; j < 4; j++ ) { printf( "%d, ", *(*(A+i)+j) ); } } printf( "\n" ); } void ShowArrayValue3( int Array[5][4] ) { // Daryafte Address >>> Namayesh Tamam Maghadir????? int i, j; for( i = 0; i < 5; i++ ) { for( j = 0; j < 4; j++ ) { printf( "%d, ", Array[i][j] ); } } printf( "\n" ); } void ShowArrayValue4( int **Adr ) { int i, j; for (i=0; i<5; i++) { for (j=0; j<4; j++) { printf( "%d, ", *(*(A+i)+j) ); } } printf( "\n" ); } void ShowArrayValue5( int rows, int cols, int Array[rows][cols] ) { int i, j; for (i=0; i<rows; i++) { for (j=0; j<cols; j++) { printf( "%d, ", Array[i][j] ); } } } void main() { ShowArrayValue1( A[0][0] ); // Ersale Meghdar Khone 0,0 + Namayesh in Meghda ShowArrayValue2( &A[0][0] ); // Ersale Adres Khone 0,0 + Namayesh Tamam Maghadir ShowArrayValue3( &A[0][0] ); // Ersale Adres Khone 0,0 + Namayesh Tamam Maghadir //ShowArrayValue3( A ); // Ersale Adres Khone 0,0 + Namayesh Tamam Maghadir ShowArrayValue4( &A[0][0] ); ShowArrayValue5( 5, 4, A ); while(1); } |
بیش از این مصدع اوقات نمیشم، فیلم زیر رو هم توصیه میکنم ببینید، فعلا یا علی
رابطه دیپلماسی لبخند و ماجرای ربوده شدن حاج احمد متوسلیان
http://www.aparat.com/v/ACfP3
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. انشاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
فعلا دارم رو USB و میکرو LPC کار میکنم، 3 تا موضوع مطرح هستش ( که تو ذهنمه هر3شو برم ) :
1) میکرو در نقش Device ( فعلا محوریت کار من این مورد هستش )
2) میکرو در نقش Host
3) میکرو در نقش OTG
و باز 2 تا موضوع مطرح هستش، برا راه اندازی usb دو تا راه داریم ( که تو ذهنمه هر2شو برم ) :
1) استفاده از میکروکنترلر ( فعلا محوریت کار من این مورد هستش که از LPC1768 استفاده میکنم )
2) استفاده از آیسی های مختص اینکار.
فعلا کارم با دیتاشیت usb تموم شده، دارم کلاس های usb رو مطالعه میکنم، کلاس cdc رو ماستمالی کردیم و یه پروژه ازش منتشر کردیم، الان رو کلاس HID ریز شدم و دارم مطالعه میکنمش و پروژه ازش میزارم تو سایت.
جزئیات داستان رو در لینک زیر میتویند ببینید :
سوالی داشتید در قسمت نظرت مطرح کنید؛ بلد باشم حتما جواب میدم ( اکثر مواقع آنلاین هستم و در کمتر از 1 ساعت جواب میدم )