带指针的数组长度 C++如何仅用指针获得数组长度?我知道选项卡名是指向第一个元素的指针,但下一步怎么办?

带指针的数组长度 C++如何仅用指针获得数组长度?我知道选项卡名是指向第一个元素的指针,但下一步怎么办?,c++,arrays,pointers,C++,Arrays,Pointers,您不能这样做。您需要将数组长度与数组指针一起传递,或者需要使用容器对象,例如std::vector您的意思是: int a[10]; int *start = a; int *end = a + 10; size_t n = end - start; /* pointers! :-) */ 你不能,除非你知道结束指针指向什么。对于字符数组,它是一个“\0”,因此您可以循环直到读取该字符以计算长度。您不能。指针只是一个内存位置,不包含任何可以确定大小的特殊内容 因为这是C++,你可以做的是通过引

您不能这样做。您需要将数组长度与数组指针一起传递,或者需要使用容器对象,例如
std::vector

您的意思是:

int a[10];
int *start = a;
int *end = a + 10;
size_t n = end - start; /* pointers! :-) */

你不能,除非你知道结束指针指向什么。对于字符数组,它是一个“\0”,因此您可以循环直到读取该字符以计算长度。

您不能。指针只是一个内存位置,不包含任何可以确定大小的特殊内容

因为这是C++,你可以做的是通过引用来传递数组,比如:

template <typename T, size_t N>
void handle_array(T (&pX)[N])
{
    // the size is N

    pX[0] = /* blah */;
    // ...
    pX[N - 1] = /* blah */;
}

// for a specific type:
template <size_t N>
void handle_array(int (const &pX)[N]) // const this time, for fun
{
    // the size is N

    int i = pX[0]; // etc
}

就尺寸而言:

template <typename T, size_t N>
size_t countof(T (&pX)[N])
{
    return N;
}

template <typename T, size_t N>
T* endof(T (&pX)[N])
{
    return &pX[0] + N;
}

// use
int someArray[] = {1, 2, 6, 2, 8, 1, 3, 3, 7};

size_t count = countof(someArray); // 9
std::for_each(someArray, endof(someArray), /* ... */);
模板
尺寸(t和pX)[N])
{
返回N;
}
模板
T*endof(T(&pX)[N])
{
返回&pX[0]+N;
}
//使用
int someArray[]={1,2,6,2,8,1,3,3,7};
size_t count=计数(someArray);//9
std::for_each(someArray,endof(someArray),/*…*/);

我经常使用这些实用程序函数。

No,“end”指针通常是超过end的一个指针(这是合法的),具体来说就是end-start=length,这样你就可以为(int*I=start;I!=end;++I)执行
之类的操作。最好使用
typedef
来创建数组类型,并接受对它的引用,以消除
模板
,除非这些方法将在头文件中,并且数组大小实际上是不同的(但剩余的编译时是确定的)。@Potatoswatter:我不知道如何生成这样的typedef。函数在通过调用实例化之前不知道N。我将添加一个typedef的示例,这就是你的意思吗?是的,你添加的示例typedef就是我的意思<代码>模板
非常适合自动调整大小
整数[]={…}但是实例化可能会带来不便/混乱,并且好处很小,除非数组是这样声明的。或者用户碰巧正在使用几个固定大小的程序。目前,我希望在C++4x最终确定时能够获得社会保障。我不知道有什么大不了的:现在就可以使用boost::array。没什么大不了的;仅仅是哀悼公爵Nukm永远的进步C++标准委员会的进展。在字符串的情况下,它通常是代码> \ 0 < /代码>。并非每个字符数组都是字符串。
template <typename T, size_t N>
size_t countof(T (&pX)[N])
{
    return N;
}

template <typename T, size_t N>
T* endof(T (&pX)[N])
{
    return &pX[0] + N;
}

// use
int someArray[] = {1, 2, 6, 2, 8, 1, 3, 3, 7};

size_t count = countof(someArray); // 9
std::for_each(someArray, endof(someArray), /* ... */);