相关疑难解决方法(0)

如何在C中确定数组的大小?

如何在C中确定数组的大小?

也就是说,阵列可以容纳的元素数量是多少?

c memory arrays

907
推荐指数
17
解决办法
183万
查看次数

*(&arr + 1) - arr 如何给出数组大小

int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)

我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

c++ arrays

36
推荐指数
4
解决办法
3430
查看次数

为什么我们不能使用双指针来表示二维数组?

为什么我们不能使用双指针来表示二维数组?

arr[2][5] = {"hello","hai"};
**ptr = arr;
Run Code Online (Sandbox Code Playgroud)

这里为什么双指针(**ptr)在这个示例中不起作用?

c

20
推荐指数
3
解决办法
1万
查看次数

强制数组衰减(因为没有更好的标题)

受到这个问题的启发:*(&arr + 1) - arr 如何给出数组 arr 元素的长度?

以下代码将计算数组的长度,尽管调用了未定义的行为:

int  arr[] = {5, 8, 1, 3, 6};
size_t len = *(&arr + 1) - &arr[0]; // len is 5
Run Code Online (Sandbox Code Playgroud)

我相信,通过取消引用 (&arr + 1) 我们正在触发未定义的行为。但是,我们这样做的唯一原因是立即将结果衰减为int*,指向原始数组中最后一个元素之后的一个元素。由于我们没有取消引用这个指针,我们在定义的区域中很好。

因此,问题如下:是否有一种方法可以在int*不取消引用不可引用指针并保持定义的情况下衰减?

PS 强制免责声明:是的,我可以使用sizeof运算符和除法计算数组的大小。这不是问题的重点。

编辑: 我现在不太确定间接本身是未定义的。我发现http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232从它看起来似乎有试图使间接本身合法化,但我没有能够在实际标准中找到任何与此相关的措辞。

c++ language-lawyer

5
推荐指数
1
解决办法
198
查看次数

容器的 begin() 和 end() 的不同实现

我正在练习实施容器。我的目标是定义迭代器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)

c++ containers iterator

4
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×3

arrays ×2

c ×2

containers ×1

iterator ×1

language-lawyer ×1

memory ×1