我不明白这怎么可能,我可以在这里进行最后 线。我集合Pi到j的参考
其实,你设置你的指针 PI,指向内存地址j的。
当你做pi [3]时,你使用一个非数组变量作为数组。虽然有效的C++,但它本质上是危险的。您可能会覆盖其他变量的内存,甚至访问进程外的内存,这会导致操作系统查杀您的程序。
说到这里,pi [3]意味着你在说“让我从pi的内存位置开始第三位”。所以你没有碰到pi本身,而是一个抵消。
如果你想使用数组,把他们定义为这样:
double pi[5]; //This means 5 doubles arrayed aside each other, hence the term "array".
Appropos阵列,在C++中,它通常是最好不要使用原始阵列,而是使用向量(也有其他类型的容器):
vector<double> container;
container.push(5.25); //"push" means you add a variable to the vector.
与原阵列的容器,例如作为载体,将保持它的大小在内部,所以如果你已经把5个双打中,你可以调用container.size(),这将返回5有用for循环等。
关于你的第二个问题,你实际上返回了一个对你的“abcdefg”字符串的子字符串的引用。
&([3])表示“给我一个字符串,从d开始”。由于c风格的字符串(这是什么char *被称为)在最后添加一个额外的NULL,任何代码将这些作为参数(如cout)将继续阅读内存,直到他们偶然发现NULL(又名0 )。 NULL终止字符串,这意味着它标记数据的结束。
Appropos,c风格的字符串是行为像一个数组,但实际上没有一个的唯一数据类型。这也意味着它们很危险。我个人从来没有任何需要使用它。我建议使用现代字符串。这些更新的,特定于C++的变量既可以安全使用,也易于使用。像矢量一样,它们是容器,它们跟踪它们的大小,并自动调整大小。观察:
string test = "abcdefg";
cout<<test.size()<<endl;//prints 7, the number of characters in the array.
test.append("hijklmno");//appends the string, AND updates the size, so subsequent calls will now return 15.
没有涉及的任何引用,只是指针和地址。 –
我建议读一本初学C++书来学习基础知识,这一切都将变得清晰起来。 – mathematician1975
你需要先阅读一本好的C++书。这些都是非常基本的问题。 –