C++问题:
使用函数调用,排序string字符串数组从小到大,没有使用指针和引用,为什么实参也会改变?
源代码
#include<iostream> #include<string> using namespace std; int main() { void sort(string []); string array[3] = {"l" , "love" , "c++"}; sort(array); for(int i = 0; i< 3;i++) cout << array[i] <<" "; return 0; } void sort(string s[]) { string temp; for(int i=0; i<2 ;i++) { for(int j=0;j<2-i;j++) { if(s[j + 1] < s[j]) { temp = s[j]; s[j] = s[j+1]; s[j+1] = temp; } } } }
改变的值是实参的值,也就是说实参对形参传的是地址,此时形参与实参为同一个地址,形参在改变形参也会改变,所以string类与数组做形参时一样,string类的形参是一个指针,接受的是字符串首个字符地址,其中数组类型在存贮数据是连续线性存贮的,而string类在存贮字符串数组则是存贮每个字符串首字母的地址,比如a[3] = {"I","love", "c++"}中a[2]为第一个字符串的地址,也就是love种l的地址,这样一来string类字符串数组的每一个字符串长度没有限制。