如何从指针中获得数组的长度
How to get the length of an array from a pointer?
我很难找到一个指针数组的长度。比如我有:
char array[40] = "hello"; // size 40
int length = sizeof array / sizeof array[0]; // no problem returns 40
//如何使用指向数组第一个元素的指针来获取数组的长度?
char* pchar = array;
如果 //
std::strlen(pchar); // this returns the length of 5... i want length 40
如果//
int count = 0;
while(true)
{
if(*(pchar + count) == ' ') // returns 5...
break;
count++;
}
我如何让它返回长度40只是从指针到数组中的第一个元素?
我发现我能做到。
int count = 0;
while(true)
{
if(*(pchar + count) == ' ' && *(pchar + count + 1) != ' ')
break;
count++;
}
返回39,这很好,但我觉得这在某些情况下可能会有bug。
恐怕不行。您需要将数组的长度传递给任何需要它的人。或者您可以使用std::array
或std::vector
或类似的,它们自己跟踪长度。
你不能。教训是,不要用指针和数组,要用向量。你总是可以得到一个向量的大小
c++有合适的字符串类型:
std::string
,您可能会在这里发现有用的。即使您将它传递给接受const char*
的函数,它也有.c_str()
方法,允许您将它传递给接受指针的函数。如果其他函数需要修改字符串,您可以使用&str[0]
,它对许多c++实现都有效,并且需要在c++ 11中工作。只是要确保你把它们调整到正确的大小。
c++中的其他容器:
std::array
(c++ 11)常量数组。比普通的旧C数组好,因为它有size()
方法。std::vector
动态数组(Java ArrayList
等效)
至于你的问题-没有办法找到一个指向数组的大小。你怎么能这么做?这只是一个愚蠢的指针。
确实不能从指向数组元素的指针中获取数组的大小。
如果你只有一个指针的原因是因为你正在实现一个以数组形参作为实参的函数,就像这样:
void foo (T *p) {
// p is a pointer to T
}
则可以使用模板函数来获取该函数的数组大小。
template <unsigned N, typename T>
void foo (T (&p)[N]) {
// p is a reference to an array[N] of T
std::cout << "array has " << N << " elements" << std::endl;
std::cout << "array has "
<< sizeof(p)/sizeof(p[0])
<< " elements"
<< std::endl;
}
int main ()
{
int array[40];
char array2[25];
foo(array);
foo(array2);
return 0;
}
如果你想保持简单而不使用#include <array.h>
,你可以在数组大小的地方创建一个struct。有点像:
struct
{
int* int_Array;
int array_Size;
}
这样,你可以做任何你想做的(比如删除你的实例或其他)
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”