با سلام به تمامی دوستان
من یه سوالی داشتم در مورد ارایه ها سوالم این بود که ما زمانی که
توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
ممنون
Printable View
با سلام به تمامی دوستان
من یه سوالی داشتم در مورد ارایه ها سوالم این بود که ما زمانی که
توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
ممنون
سلام من vb بلد نیست باتوجه به این
redim= کلمه کليدي براي تعريف آرايه هاي ديناميکي
int* r=new int[4];
شاید منظور شما این باشه
فکر کنم منظورتون تغییر سایز آرایه باشه ، که تو ++C آرایه ها معمولا به دو نوع تعریف میشوند :نقل قول:
توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
- Fixed Static
- Dynamic
حالت اول به این معنا نیست که سایز آرایه محدود است ، شما در این حالت میتوانید هر سایزی مجاز برای
آرایه انتخاب کنید 10 ، 700 ، 1000 و ... ولی دیگر وقتی آرایه سایزش مشخص شد ، قابل تغییر نخواهد بود .
حالت دوم ، جهت ایجاد آرایه های پویاست ، آرایه هایی که طول آنها در حین اجرای برنامه یا در زمان
Runtime معلوم میشود ، در این حالت باز هم وقتی آرایه سایزش مشخص شد ،
دیگر قابل تغییر نخواهد بود .
ولی این قابلیت برای Vector ها وجود دارد که شما میتوانید سایزی برای آن در نظر گرفته و بعد آنرا تغییر
دهید که اینکار با متود resize انجام میشود ./
موفق باشید ./
نمی دونم redim کارش چیه چون این دو با هم فرق دارن
growable array, resizable array=Dynamic array
dynamically-allocated array
ما هم نگفتیم یکی هستن ، تک تک بررسی کردیم !نقل قول:
نمی دونم redim کارش چیه چون این دو با هم فرق دارن
ببینید دوست عزیز ، اگه از لحاظ تئوری وار بریم جلو ، میشه آرایه ها رو به 4 الی 5 بخش تقسیم کرد ،
از جمله : Dynamic,Fixed Stack Dynamic,Fixed Heap Dynamic,Fixed Stack Static, ...
ولی همه اینها که در همه زبانها پیاده سازی نشده اند و در زبان ++C,C دو نوع معمول وجود دارد که در بالا
ذکر کردم !
در ضمن در همین لینک ویکی شما گفته بنده دیده میشه :
نقل قول:
دوست عزیز ، من در بالا ذکر کردم ، اینکار بطور پیش فرض برای آرایه ها در ++C,C ممکن نیست ، ولی اگهنقل قول:
برای تغییر اندازه آرایه
با STL یا (Standard Template Library) آشنایی داشته باشید ، گفتم میتونید از Vector ها استفاده کنید ./
یه مثال :
http://www.cplusplus.com/reference/stl/vector/resize/
--------------------
بارها من این نکته رو گفتم ، اینطور فکر نکنید که ++C یه زبان و یه دنیاست و C یه دنیای دیگر !نقل قول:
البته من C کار می کنم ++C کار نکردم
این دو مکمل یکدیگرند ! جدای اینکه ++C تکمیل یافته C میباشد ./
موفقیت همه دوستان برنامه نویس ، آرزوی قلبی ماست و ما به این افتخار میکنیم !نقل قول:
به قول خودتون :موفق باشید ./
در C یا سی++ آرایههای خام (raw arrays) (یا ایجاد شده بر روی stack یا ایجاد شده بر روی free store)، تغییر اندازه نمیدهند. شما اگر آرایهای را با اندازهٔ x ایجاد کنید، هیچگاه نمیتوانید اندازهٔ آن را تغییر دهید. بنابراین، به عنوان راه حل، یک آرایهٔ جدید با طول جدید ایجاد میکنند و سپس اعضای موجود را از آرایهٔ قبلی در آرایهٔ جدید کپی کرده و آرایهٔ قبلی را نابود میکنند. در VB نیز اینکار صورت میگیرد اما بطور غیر مستقیم و دور از چشم برنامهنویس.نقل قول:
می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
بنابراین، برای تغییر طول آرایه، باید یک آرایهٔ جدید را با طول جدید ایجاد کرده و اعضای آرایهٔ قبلی را در آرایهٔ جدید به ترتیب کپی کنید، سپس آرایهٔ قبلی را نابود کنید. در سی++ کلاس vector این کار را توسط تابع resize برای شما انجام میدهد، در زبان C نیز اینکار توسط تابع realloc صورت میگیرد، یا بدون استفاده از این تابع:
int* x = (int*)calloc(sizeof(int), 5);
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
x[4]=5;
int* y = (int*)calloc(sizeof(int), 10);
memcpy(y, x, sizeof(int) * 5);
free(x);
x = y;
y = NULL;
x[5]=6;
x[6]=7;
x[7]=8;
x[8]=9;
x[9]=10;
ممنون PC2st
من از این کد استفاده میکنم
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main() {
int* array;
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
array = (int*) malloc(n*sizeof(int));
for (i=0; i<n; i++) {
printf("Enter number %d: ", i);
scanf("%d", &array[i]);
}
حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟
ممنون
برای اینکار باید برعکس همین کار را انجام دهید!! یعنی آرایهٔ دوبعدی را بصورت آرایهٔ یکبعدی (معمولی) مورد استفاده قرار دهید، باتوجه به اینکه آرایههای دوبعدی در حقیقت (نحوهٔ چینش اعضای آنها در حافظه) همان آرایههای تکبعدی هستند، پس برای ایجاد یک آرایهٔ دو بعدی به اندازهٔ m در n خواهیم داشت:نقل قول:
حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟
array = (int*) malloc(m*n*sizeof(int));برای دسترسی به تمام اعضای این آرایه بر اساس اعضای موجود در سطر i ام و سطر j ام:
array[i*(m+1)+j]i از صفر تا m-1 و j از صفر تا n-1 (حداکثر طول آرایهٔ array برابر با m*n است)
بطور مثال برای دسترسی به عضو موجود در سطر اول (0) و ستون سوم (2) مینویسیم:
array[0*(m+1)+2] //array[0][2]
ممنون
میشه شکل کلی کد رو بذارید من مبتدیم
ممنون
#include <stdlib.h>
#include <stdio.h>
int main() {
int* array;
int m, n, i, j, x;
printf("Enter the number of elements: ");
scanf("%d", &m);
scanf("%d", &n);
array = (int*) malloc(m*n*sizeof(int));
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
printf("Enter number %d, %d: ", i, j);
scanf("%d", &array[i*(m + 1)+j]);
}}
for (x=0; x<m*n; ++x) {
printf("%d: %d\n",x, array[x]);
}
}