因此,我一直在Stackoverflow上搜索所有可以找到数组指针大小的代码。我找不到。
Product product = JsonConvert.DeserializeObject<Product>(your response string);
使用sizeof不起作用。谁能提出一个好的解决方案?非常感谢!
**编辑:
我想使用指针“ sizes”查找数组的大小。我知道如何使用“数组”变量来查找大小
答案 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位(尽管不小于!),并声称在技术上符合该标准。您现在不必担心这种可能性。说真的,你没有。