#include <iostream>
using namespace std;
int main() {
int arr[5] = {5, 8, 1, 3, 6};
int len = *(&arr + 1) - arr;
cout << "The length of the array is: " << len;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,我不太明白这两段代码是做什么的:
*(&arr + 1)
Run Code Online (Sandbox Code Playgroud)
和
*(&arr)
&arr
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?因为当我运行以下两个代码时,我得到以下相同的输出:
&arr (我认为这指向arr的第一个元素的地址)
*(&arr)那么我不太明白这是做什么的,符号*对&arr(即这里的地址)有什么作用?,因为当我运行它们时,两个输出是相同的
最后,当一个整数说 1 被这里的代码添加到地址时,到底发生了什么:
&arr + 1
我正在练习实施容器。我的目标是定义迭代器begin(),end()
以便我可以使用for(auto x : v). 我的容器看起来像这样:
class Vector{
public:
Vector(initializer_list<double> numbers){
sz = numbers.size();
elem = new double[sz];
int i = 0;
for (auto it = numbers.begin(); it!=numbers.end(); ++it)
elem[i++] = *it;
}
~Vector(){delete [] elem;}
double* begin();
double* end();
private:
double* elem;
int sz;
};
Run Code Online (Sandbox Code Playgroud)
选项1
这就是我定义迭代器的方式(它们在我的测试用例中工作得很好)
double* Vector::begin(){
return elem;
}
double* Vector::end(){
return &elem[sz];
}
Run Code Online (Sandbox Code Playgroud)
选项 2
这就是它们在A Tour of C++中的定义
double* Vector::begin(){
return &elem[0];
}
double* Vector::end(){
return &elem[0]+sz; …Run Code Online (Sandbox Code Playgroud)