我正在尝试使用双指针方法在C++中创建一个二维数组。但是当我初始化变量时,我总是得到数组的大小是8。
double** sobel_x;并将大小设置为8,然后当我尝试此操作时:
double** sobel_x;
sobel_x = new int*[3];
for(int i = 0; i < sizeof(sobel_x); i++) {
sobel_x[i] = new int[3];
}有人能先给我解释一下为什么数组被初始化为大小为8,然后如何改变这个大小吗?
发布于 2013-10-05 17:52:30
这段代码:
double** sobel_x = new int*[3];
std::cout << sizeof(sobel_x);将始终打印sizeof 指针,因为sizeof是在编译时计算的(基于类型,在本例中为double** ),而不管您在运行时为此指针分配了什么。
请改用std::vector:
std::vector< std::vector<double> > sobel_x(3, std::vector<double>(3, 0.0));
std::cout << sobel_x.size();请注意,即使您能够检索到大小,大小也将以字节为单位。它不会给你元素的计数。要使用数组实现这一点,您可以使用具有自动存储持续时间的静态数组:
double sobel_x[3][3] = { 0.0 };
std::cout << sizeof(sobel_x); // <-- outputs 72
std::cout << sizeof(sobel_x[0]); // <-- outputs 24
std::cout << sizeof(sobel_x) / sizeof(sobel_x[0]); // <-- outputs 3发布于 2013-10-05 17:53:13
您在sobel_x上调用sizeof,而sobel_x是一个指针。这意味着8是你系统上指针的大小(大概是64位机器)。
这篇文章解释说,你不能做你想做的事情:C++: getting the row size of a multidimensional array passed to a function
如果您需要在运行时计算长度,请使用STL类之一,如vector。
尽管对于您的简单用例,您已经知道sobel_x所指向的数组中有多少元素(在本例中为3),因此只需将其用作循环中的测试条件即可。
https://stackoverflow.com/questions/19196324
复制相似问题