PDA

View Full Version : مشکل با ارسال آرایه به تابع



NIMA_1981
جمعه 17 آذر 1391, 00:12 صبح
سلام دوستان من با ارسال یک آرایه به یک تابع مشکل دارم آرایه ارسال میشه و با تغییر مقدار ایندکس تمام محتوا را نشان میدهد اما وقتی میخوام طول آرایه را حساب کن مقدار یک رو نشان میده میشه زاهنمایی کنید

#include <iostream>
#include <string>;
using namespace std;

void foo( string iArray[] )
{
cout<<iArray[2];
int num = sizeof(iArray) / sizeof(iArray[0] );
cout<<num;
}

int main()
{
string s[]={"java","c++","math","network","PHP"};
foo( s );
}



با تشکر

aidinMC
جمعه 17 آذر 1391, 00:36 صبح
سلام
خب چرا از تابع سایز استفاده نمیکنی؟

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

void foo( string iArray[] )
{
cout<<iArray[3];
int num;
num = iArray[3].size();
cout<<num;
}

int main()
{
string s[]={"java","C++‎","math","network","PHP"};
foo( s );
_getch();
}

NIMA_1981
جمعه 17 آذر 1391, 09:00 صبح
ممنون من با اون فرمول میخوام تعداد عناصر داخل آرایه رو حساب کنم اینی که شما نوشتین سایز المنت 3 رو نشون میده

NIMA_1981
جمعه 17 آذر 1391, 09:06 صبح
دقیفا مشکل اینجاست جون سایز برای string برابر با 4 است که 5 تا المنت داره میشه 20 بیرون از تابع مقدار 20 رو میده اما وقتی آزایه به تابع ارسال میشه این مقدار برابر با 4 میشه در حالی که آرایه به درستی ارسال شده و همه المنت ها را میشه نمایش داد -

hadi0x7c7
جمعه 17 آذر 1391, 09:59 صبح
وقتی میخوام طول آرایه را حساب کن مقدار یک رو نشان میده میشه زاهنمایی کنید
احتمالا به این دلیله که ارایه by refrence داری ارسال میشه. چون من کدو به این شکل تغییر دادم درست جواب داد
string s[] = { "java", "C++‎", "math", "network", "PHP" };
//foo(s);
int num = sizeof(s) / sizeof(s[0]);
cout << num << endl;

هر مشکلی هست از نحوی ارسال به تابع هست. حالا شما چرا از vector<string> استفاده نمیکنی که متد size هم داره؟

NIMA_1981
جمعه 17 آذر 1391, 10:15 صبح
ممنون از شما- من قبلا هم نوشتم داخل تابع اصلی درست کار میکنه اما هنگام ارسال مشکل داره - از وکتور نمیتونم استفاده کنم چون بصورت مستقیم نیمتونم مقدار دهی کنم

omidshaman
جمعه 17 آذر 1391, 14:02 عصر
دلیلش اینه شما وقتی array رو میفرستی تبدیل میشه به پوینتر به خاطر همین اون چیزی که میخواین رو نشون نمیده
یک راهش میشه مثلا این که کار sizeof زو با اون while انجام بدیم

#include <iostream>
#include <string>
using namespace std;

void foo( string iArray[] )
{
int i=0;
while(iArray[++i]!="\0")
i=i;
int number_elements = i*4 / sizeof(iArray[0] );
cout<<number_elements;
}

int main()
{
string s[]={"java","C++‎‎‎‎","math","network","PHP","ds ","\0"};
foo( s );
}

NIMA_1981
جمعه 17 آذر 1391, 14:39 عصر
مرسی مشکل با کدی که شما قرار داد حل شد