指针指向的数组的大小

时间:2018-09-29 01:23:55

标签: c++

因此,我一直在Stackoverflow上搜索所有可以找到数组指针大小的代码。我找不到。

Product product = JsonConvert.DeserializeObject<Product>(your response string);

使用sizeof不起作用。谁能提出一个好的解决方案?非常感谢!

**编辑:

我想使用指针“ sizes”查找数组的大小。我知道如何使用“数组”变量来查找大小

3 个答案:

答案 0 :(得分:1)

您可以阅读c ++文档http://www.cplusplus.com/reference/array/array/size/

例如:

// array::size
#include <iostream>
#include <array>

int main ()
{
  std::array<int,5> myints;
  std::cout << "size of myints: " << myints.size() << std::endl;
  std::cout << "sizeof(myints): " << sizeof(myints) << std::endl;

  return 0;
}

答案 1 :(得分:0)

如果您想获得C级的答案,为什么将这个问题标记为c++

int main() {
    int array[] = {6,3, 4, 6, 2};
    cout << sizeof(array) / sizeof(int);
    return 0;
}

这可能不令人满意,但是使用指向数组的指针无法找到数组的大小。指针与数组不同,可以通过正确的转换指向任何类型的变量。它不像数组那样存储直接的内存分配位置。这就是为什么在进行sizeof(pointer)时,总是会在大小为64位的OS体系结构中获得8个字节或在大小为32位的OS体系结构中获得4个字节的原因。

了解c中的指针与数组之间的区别。

答案 2 :(得分:0)

在声明array的范围内,sizeof(array)是数组中的字节数。¹

如果您想要array中的元素数,则为(sizeof(array)/sizeof(array[0]))

由于sizes被声明为int*,因此sizeof(sizes)是指针的大小。对于64位程序,这将是8;对于32位程序,将是4;或者在不寻常的体系结构上将达到其他大小。

还有另外一个问题:如果将array传递给某个函数,例如:

int* reverse_array( int a[], const size_t n )
{
  assert( sizeof(a) == sizeof(int*) );
  // ...
}

然后,数组参数a自动降级为指针,并且编译器忘记了其实际大小。这是为了与C向后兼容。

要在另一个函数中使用数组,必须将大小作为单独的参数传递,在这种情况下为n,或使用诸如std::array<int>std::vector<int>struct。后者是Bjarne Stroustrup的C ++指南所建议的,但是,如果在库的ABI中使用STL模板,则会引入对STL特定实现的依赖。

¹因为这个社区喜欢语言讨论:一些历史悠久的C编译器以字节以外的增量来度量大小。假设某些C ++编译器可能使char的宽度超过8位(尽管不小于!),并声称在技术上符合该标准。您现在不必担心这种可能性。说真的,你没有。