C++字符串数组如何作为函数参数
voidTEST(string*y,string*x);intmain(){stringy[]={"y1","yb"};stringx[]={"x1","x2","x3"...
void TEST(string *y,string *x);
int main(){
string y[]={"y1","yb"};
string x[]={"x1","x2","x3","x4"};
TEST(y,x);
cout<<sizeof(y)<<endl; //在主函数中y的长度的确是2*8=16
cout<<sizeof(x)<<endl; // 输出x的长度是4*8=32
return 0;
}
void TEST(string *y,string *x)
{
cout<<sizeof(y)<<endl; //调用出现问题,此处输出了y的长度为8
cout<<sizeof(x)<<endl; //此处输出了x的长度为8
}
为什么会出现这个问题?是调用出错还是函数参数部分写错?应该如何改正? 展开
int main(){
string y[]={"y1","yb"};
string x[]={"x1","x2","x3","x4"};
TEST(y,x);
cout<<sizeof(y)<<endl; //在主函数中y的长度的确是2*8=16
cout<<sizeof(x)<<endl; // 输出x的长度是4*8=32
return 0;
}
void TEST(string *y,string *x)
{
cout<<sizeof(y)<<endl; //调用出现问题,此处输出了y的长度为8
cout<<sizeof(x)<<endl; //此处输出了x的长度为8
}
为什么会出现这个问题?是调用出错还是函数参数部分写错?应该如何改正? 展开
4个回答
展开全部
sizeof(string),由于它们都是和系统相关的(我的操作系统是32位的),所以在不同的系统下取值可能不同,这务必引起注意,尽量不要在这方面给自己程序的移植造成麻烦。一般情况下,在32位系统中,sizeof(string)为16字节。
sizeof都和内存中的存储方式有关。你这里没有理清楚数组函数的传参的实质,你这里定义字串数组string
[]x, string []y;
在main函数中,x,y都是数组, sizeof(x)的值为数组的长度*sizeof(string)。值得注意的是x也代表数组x中元素的首地址。这里不要把sizeof(x)的值理解为4(即指针的长度),但是在函数中的数组会定义为指针。
如你的函数:
void TEST(string *y,string *x){
cout<<"test_y-> "<<sizeof(y)<<endl; //这时候值为4(你的为8),因为在传参时传递的是首元素的地址,函数在内存空间定义一个指针类型y,指向数组y,这时候在内存中y实际为指针类型
cout<<"test_x-> "<<sizeof(x)<<endl;
}
追问
我大致看懂了,我现在把这个数组传进函数里的时候,好像只读了第一个字符串,如果我希望把这个字符串数组完整地传进函数里面用的话该怎么办?
追答
void TEST(string *y,string *x){
cout " "<<sizeof(x)<<endl; //此处输出了x的长度为8
for(int i = 0; i < 4; i++)
cout<<x[i]<<" ";
cout<<endl;
}
展开全部
当数组名做形参在函数体内时,数组名失去了其常量特性,沦落为与指针相同四字节待遇的平民。
简单的讲,就是如果你想把数组传给一个函数,那么必须将这个数组的长度也传给这个函数。因为数组名当形参时,他就会退化成一个4字节的指针,同时这个数组的长度你也没法知道了
简单的讲,就是如果你想把数组传给一个函数,那么必须将这个数组的长度也传给这个函数。因为数组名当形参时,他就会退化成一个4字节的指针,同时这个数组的长度你也没法知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是c++的语言特性的问题。
将数组作为函数参数,数组会退化成指针。
也就是在函数TEST中,y和x不再是数组,仅仅是指针。指针的长度都一样。
所以将数组作为参数传入时,一般会将数组长度作为另一个参数,不然函数无法判断数组长度。
将数组作为函数参数,数组会退化成指针。
也就是在函数TEST中,y和x不再是数组,仅仅是指针。指针的长度都一样。
所以将数组作为参数传入时,一般会将数组长度作为另一个参数,不然函数无法判断数组长度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为啥要用C语言的数组呢? 你的这个问题是由于将数组传递给函数时数组的长度信息丢失导致。
C++有自己的“ 数组” : std::array std::vector std::dynarray
用这些更好,而且都是标准库,C++编译器可能优化这些“数组”的性能。
C++有自己的“ 数组” : std::array std::vector std::dynarray
用这些更好,而且都是标准库,C++编译器可能优化这些“数组”的性能。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询