首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用指针初始化C++数组,获取大小为8

使用指针初始化C++数组,获取大小为8
EN

Stack Overflow用户
提问于 2013-10-05 17:49:55
回答 2查看 531关注 0票数 1

我正在尝试使用双指针方法在C++中创建一个二维数组。但是当我初始化变量时,我总是得到数组的大小是8。

代码语言:javascript
复制
  double** sobel_x;

并将大小设置为8,然后当我尝试此操作时:

代码语言:javascript
复制
  double** sobel_x;
  sobel_x = new int*[3];
  for(int i = 0; i < sizeof(sobel_x); i++) {
    sobel_x[i] = new int[3];
  }

有人能先给我解释一下为什么数组被初始化为大小为8,然后如何改变这个大小吗?

EN

回答 2

Stack Overflow用户

发布于 2013-10-05 17:52:30

这段代码:

代码语言:javascript
复制
double** sobel_x = new int*[3];
std::cout << sizeof(sobel_x);

将始终打印sizeof 指针,因为sizeof是在编译时计算的(基于类型,在本例中为double** ),而不管您在运行时为此指针分配了什么。

请改用std::vector

代码语言:javascript
复制
std::vector< std::vector<double> > sobel_x(3, std::vector<double>(3, 0.0));
std::cout << sobel_x.size();

请注意,即使您能够检索到大小,大小也将以字节为单位。它不会给你元素的计数。要使用数组实现这一点,您可以使用具有自动存储持续时间的静态数组:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 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),因此只需将其用作循环中的测试条件即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19196324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档