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_x-> "<
cout<<"test_y-> "<
当数组名做形参在函数体内时,数组名失去了其常量特性,沦落为与指针相同四字节待遇的平民。
简单的讲,就是如果你想把数组传给一个函数,那么必须将这个数组的长度也传给这个函数。因为数组名当形参时,他就会退化成一个4字节的指针,同时这个数组的长度你也没法知道了
这个是c++的语言特性的问题。
将数组作为函数参数,数组会退化成指针。
也就是在函数TEST中,y和x不再是数组,仅仅是指针。指针的长度都一样。
所以将数组作为参数传入时,一般会将数组长度作为另一个参数,不然函数无法判断数组长度。
为啥要用C语言的数组呢? 你的这个问题是由于将数组传递给函数时数组的长度信息丢失导致。
C++有自己的“ 数组” : std::array std::vector std::dynarray
用这些更好,而且都是标准库,C++编译器可能优化这些“数组”的性能。