c++ 数组用指针方式传递给函数以后如何获得数组的长度?

如题。

将数组作为一个参数传出去,那么他就会“退化”成一个指针类型,进而失去“数组的属性”。(这里的数组不是new出来的)

这里的“属性”指的是数组可以使用sizeof(Array)/sizeof(Array[0])的方法获得其长度的方法的属性。

要在一个函数中得到一个数组的长度,你应该这个数组作为一个引用传出去,那样,就能用sizeof(Array)/sizeof(Array[0])的方法获得长度了。追问

要求了指针传递

追答

那可真坑爹了啊,要不,你给加一个int型长度作为参数传进去?

追问

已知。用以下语句:
void strfind(char * s, char *t){
char *p1,*p2;
p1 = s ; //指针指向s的第一个字符
p2 = t + strlen(t)-1; //指针指向t的最后一个字符
}

追答

搜噶,原来是字符型的数组,字符型的数组可以用int strlen(char *)获得字符串的长度,因为它是通过找到字符串结尾'\0'来确定的。

你咋不早说呢?

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-10-13
/*Make 2D Array v2.*/
template<typename T, typename T2>
void make2dArray(/*output para*/T** &arr, const uint16_t x, T2& volatileY_array)
{
        /*你要的长度。用模版的形式,就能够把数组以指针的形式传进来。*/
int len = sizeof(volatileY_array)/sizeof(volatileY_array[0]);
try
{
if (x != len) 
{
throw std::bad_alloc();
}
arr = new T*[x];
for (int i = 0; i < x; i++)
{
arr[i] = new T[volatileY_array[i]];
}
}
catch (std::bad_alloc)
{
std::cout << "Error." << std::endl;
}
}

第2个回答  2013-09-13
无法获得,必须再传一个长度进去。追问

已知。用以下语句:
void strfind(char * s, char *t){
char *p1,*p2;
p1 = s ; //指针指向s的第一个字符
p2 = t + strlen(t)-1; //指针指向t的最后一个字符
}

追答

没说是字符串。。。
恭喜您解决问题。

本回答被提问者采纳
第3个回答  2013-09-13
int a(int * x)
{
int y;
while(!(*x))
x++;
}
第4个回答  2013-09-13
int len = sizeof(str)/sizeof(char *);追问

~

c++ 数组用指针方式传递给函数以后如何获得数组的长度?
要在一个函数中得到一个数组的长度,你应该这个数组作为一个引用传出去,那样,就能用sizeof(Array)\/sizeof(Array[0])的方法获得长度了。

C++传数组后怎么在函数内计算数组长度?
C\/C++会将数组(形参)作为指针来传递,绝对没有关于数组长度的任何信息,所以,当形参是数组时,通常还有一个参数来传递数组的长度,比如sort(int a[], int len);,a[]是int型数组,len则为数组a的长度,但形参是字符串时,则不需要传递数组长度,这是因为,字符串是以'\\0'结束的,函数通过检测'...

C里面怎么获得一个数组的长度(元素个数)?
用sizeof肯定不行,函数中s[]被当成指针了,所以sizeof出来的结果肯定是4。我刚才也遇到了和你一样的问题,在网上转了半天才有一点收获,把我的收获无私的共享给你吧。c\/c++天生设计缺陷注定了求不出s的长度的。所以一般传数组或指针时都会把数组的长度或指针指向数组的长度作为参数传进去。

C\/C++编程笔记:获取数组长度
函数定义调整:template int getArrayLen(T* array) { return (sizeof(array) \/ sizeof(array[0]) - 1); } 在C++中,如果将一个数组作为参数传递给函数,数组会退化为一个指针,因此无法直接获取数组长度。此时,若需要数组长度,通常需要传入数组的大小作为参数。希望您在编程学习的道路上取得进...

C++ 怎么得到字符串指针指向的内存块的大小?
唯一的解决办法就是增加一个长度参数 在字符串指针指向的内容是空字符结尾的字符串的时候,可以使用strlen来获取指向字符串的大小 但是实际指向内存块的大小,是无法知道的。这是因为指针在作为参数传递的时候,只传过来了地址值,而没有传过来任何长度信息 实际上指针的长度信息是编译阶段获取的,而函数...

C\/C++中如何获取数组的长度?
这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。基础语法 1、C语言数据类型 C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。2、常量与变量 常量其值不可改变,符号常量名通常用大写。变量...

C++怎样返回数组的实际长度? 例: { …… int array[10000]={1,2,3...
定义数组时别给出元素个数 int array[ ]={1,2,3,4,6,79};然后通过sizeof函数来确定元素个数 sizeof(array)\/sizeof(int); 这就是数组的实际长度

c++求数组的长度
如果动态分配,在分配时必需给定一个长度(这个值可以是在程序执行时获取到的),然后才能分配内存。你上面的问题,其实是动态分配,而不是数组。动态分配的内存,系统会记录相关数据,如果你使用自己的内存管理函数,可以很方便的取到长度,但是如果你使用其他函数(标准库的或者别人的),你就只能自己记录...

c++程序 如何获取数组的长度
计算你程序中的数组大小,其实已经知道是SIZE为100了,也可以用sizeof(i)\/sizeof(int)得出 int main(){int i[SIZE],j[SIZE],n,m; int a,b;n=strlen(i); \/\/这行有问题,strlen()是用来计算字符串长度的,参数只能是char*类型cin>>n; \/\/上一行想给n赋值,这一行为什么又要输入?f...

C++的数组传参问题
在main()函数中对赋值的数组直接调用这个函数得到的数据是正确的。而如果将数组直接以参数的方式传给调用的另外一个函数,并在此函数中获取数组的长度,程序计算出的数据只有整个数组的第一个元素的长度。原来c++中通过函数的参数的方法传送的数组数据,只包含该数组的首个元素(的地址),也就是说,在...

相似回答